Javascript为内部函数提供参数

时间:2013-06-12 09:33:27

标签: javascript

所以我的基本设置是:

for (var i = 0; i < 3; i++) {
    var indices = [-1, -1, -1];
    while (index == -1) {
        // Do Stuff
        index[i] = newIndex;  
    }       
    var press = function() { alert(i); };
    new control({press: press});                
}

现在,当我按下每个新控件而不是获取警报(0),警报(1)和警报(2)时,我会收到警报(3),警报(3)和警报(3)。 我可以理解发生了什么。现在我的问题是:如何将不同的索引传递给我想要的函数?

2 个答案:

答案 0 :(得分:3)

这是因为闭包变量i,解决方案是为每个循环创建一个私有闭包。

for (var i = 0; i < 3; i++) {
    var indices = [-1, -1, -1];
    while (index == -1) {
        // Do Stuff
        index[i] = newIndex;  
    }       
    var press = (function(myvar){
        return function() { alert(myvar); };
    })(i);
    new control({press: press});                
}

答案 1 :(得分:1)

使用闭包:

var press = (function (x) {
    return function () {
        alert(x);
    };
})(i);

这样,当前i值将保存在一个安全的地方,一个私有函数。

请注意,在循环内声明变量(带var)不是标准的,您应该在循环外声明press变量。