可能重複:
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