我是C#開發人員,習慣於在C#中使用閉包方式工作。 目前,我有匿名的JavaScript函數的工作,並與下面的代碼段遇到了一個問題:以匿名方式訪問複製的整型變量
function ClosureTest() {
var funcArray = new Array();
var i = 0;
while (i < 2) {
var contextCopy = i;
funcArray[i] = function() { alert(contextCopy); return false; };
i++;
}
funcArray[0]();
funcArray[1]();
}
我預計第一funcArray()
電話說0
和第二說1
。但是,他們都說1
。這怎麼可能?
通過書寫var contextCopy = i
我確保我創建了一個i
-變量的副本。然後,在每次迭代中,我創建一個全新的函數指針。每個功能都指自己的i
副本,即contextCopy
。但是,由於某種原因,兩個創建的函數都指向相同的變量contextCopy
。
這是如何工作在JavaScript?
有沒有原因你不使用'for'循環? – zzzzBov
不存在;-) – TwinHabit