請幫我看看是什麼原因,爲什麼當地的「J」變量繼續循環過程中改變:JS封閉的可變變量
var a1 = a2 = a3 = {};
for (var i = 1; i < 4; i ++) {
(function(j){
console.log(j);
window['a'+j].fu = function(){
console.log('fu:',j);
};
})(i);
}
a1.fu(); // returns "fu:,3" - why not 1?
a2.fu(); // returns "fu:,3" - why not 2?
a3.fu(); // returns "fu:,3"
我讀了類似問題的很好的答案,但它不工作對我案件。 Mutable variable is accessible from closure. How can I fix this?
好那是因爲你逝去的「我」的A(X).fu功能,這是「3」,在循環中它被視爲「J」。如果這是你所指的.. –
問題不在於循環。 'a1','a2','a3'全都指向同一個物體。在循環的最後一次迭代中,您將'fu'的值設置爲記錄'3'的函數。你想創建三個對象:'var a1 = {},a2 = {},a3 = {};'。 –
@FelixKling謝謝Felix,不知道它與PHP相比有什麼不同。現在正在工作。 – alex23