我知道为什么这不起作用,但无法找到正确的方法。
我尝试使用循环构建对象。 对象构建正常,但是当我尝试使用回调时,它会警告" 2"对于每个人,我都希望提醒阵列中的位置。
var playerArr = ["steve", "paul", "bob"];
var myAutomatedObj = {};
for (var i=0; i<playerArr.length; i++){
var objName = playerArr[i];
myAutomatedObj[objName] = {};
myAutomatedObj[objName]["callback"] = function(){
alert(i);
}
}
//returns incorrect alert
myAutomatedObj.steve.callback();
答案 0 :(得分:1)
属性i
由每个函数引用,因为它在它们的作用域中,但它的值等于循环结束时数组的长度。
尝试以下方法:
myAutomatedObj[objName]["callback"] = (function(j) {
return function(){
alert(j);
}
})(i);
这样您实际上复制了该值,并且您不再引用名为i
的变量。