我正在构建一个函数数组,这些函数将在后一次调用,如下所示:
callbackArray = [];
for(var i = 0; i < 5; i ++) {
callbackArray.push(function() {
console.log(i);
});
}
for(var i = 0; i < callbackArray.length; i ++) {
// This will not preserve the value of i
callbackArray[i]();
}
这将打印4,4,4,4,4。但我需要一种方法来保留i的值,这样它就不会保留相同的引用,而是创建一个新的本地值副本。预期结果应为0,1,2,3,4。这是一个显示问题的简化示例。但是变量i应该是对象,数组,函数或基元。
我该怎么做?
答案 0 :(得分:1)
这可能会有所帮助
var callbackArray = [];
// create a function that returns a new function with "i" properly scoped
var fn = function (i) {
return function () {
console.log(i);
};
};
for(var i = 0; i < 5; i ++) {
callbackArray.push(fn(i));
}
callbackArray[1](); // output 1
callbackArray[4](); // output 4
callbackArray[0](); // output 0
如果使用jquery来实现相同的效果,也可以使用$ .proxy