请帮我看看是什么原因,为什么当地的“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