【发布时间】:2012-01-03 03:00:48
【问题描述】:
我是一名 C# 开发人员,并且习惯于闭包在 C# 中的工作方式。 目前我必须使用匿名 javascript 函数并遇到以下 sn-p 问题:
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-variable。
这在 javascript 中是如何工作的?
【问题讨论】:
-
您没有使用
for循环是否有原因?
标签: javascript function closures