所以我的基本设置是:
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)。 我可以理解发生了什么。现在我的问题是:如何将不同的索引传递给我想要的函数?
答案 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
变量。