使用当前变量值创建Javascript函数

时间:2015-11-19 13:11:13

标签: javascript

我不知道如何正确地问我需要什么,所以让我试试..

如何将当前变量内容(文字)传递给以动态创建的函数?

使用以下代码可能会更好理解:

function MyClass(){

  for (i = 1; i <= 10; i++){
    this['show' + i] = function(){
      alert('You called show' + i);
    };
  }
}

var obj = new MyClass();

obj.show3();

我希望在警告中显示的是“你叫show3”而不是“show11”。

由于

2 个答案:

答案 0 :(得分:2)

由于javascript没有块范围(直到ECMAScript 6中的let),因此原始函数将使用相同的i值绑定。 调用另一个自己生成一个新函数,你可以避免这种情况,并给你不同的值。

function MyClass() {

  for (i = 1; i <= 10; i++) {
    this['show' + i] = myFunc(i);
  }
}

function myFunc(i) {
    return function() {
       alert(i);
    }
}

var obj = new MyClass();

obj.show3();

答案 1 :(得分:1)

JavaScript中有一种称为绑定的机制。您可以将范围和任何变量绑定到函数中,以便在函数内部使用它们。范围将在函数内定义this关键字。所有其他绑定变量都将作为参数提供,因此此示例中的i变量将不具有全局但本地范围,并且在函数创建中传递了值。

for (i = 1; i <= 10; i++){
    this['show' + i] = function(i){
      alert('You called show' + i);
    }.bind(this,i);
}