可能重复:
Javascript closure inside loops - simple practical example的Javascript不需要关闭行为
我试图代码类似于这样:
var funcs = [];
for (var i=0; i<5 ; ++i) {
funcs[i]=function() {
alert(i);
};
}
显然,调用funcs[0]
不会警报0
与预期的一样,只是因为变量i
被匿名函数捕获,并且调用funcs[0..4]
中的任何一个都会提醒'4'(最后一次迭代后的值为i
并被所有创建的函数共享)。
第一部作品围绕在我脑海中是使用某种函数发生器:
var funcs = [];
for (var i=0; i<5 ; ++i) {
funcs[i]=(function(cap) {
return function() {alert(cap)};
})(i);
}
该做的伎俩,但似乎真的令人费解和难以阅读。有没有更好的方式来获得预期的行为,而不使用函数包装?
你不能在函数声明后面使用'funcs [i] .i = i;'吗? –
无法重新创建(Chrome 21/Mac 10.7)http://jsfiddle.net/VDm5C/ –
Nop,因为在我正在处理的实际情况中,范围设置为调用函数funcs [i] .call(someObject,..)'。这将覆盖'this',并且'this.i'将不可访问。 – sitifensys