就在我以为我理解闭包的时候......
以下代码片段:
function f() {
var a = [];
var i;
for (i = 0; i < 3; i++) {
a[i] = function () {
var x = i;
return x;
}
}
return a;
}
var a = f();
console.log(a[0]());
console.log(a[1]());
console.log(a[2]());
打印出 3, 3, 3。我不明白为什么。我正在将“i”的值复制到局部变量 x,因此应该有三个 x:x0=0、x1=1。 x2=2。他们如何读取 i 的最终值?
最佳答案
您的问题是由每个 a[i]
实际上是一个闭包引起的。它们都共享相同的 i
,它在调用每个 a[i]
时计算,而不是在循环执行时计算。您需要使用单独的上下文创建每个闭包。例如:
function f() {
var a = [];
var i;
for (i = 0; i < 3; i++) {
a[i] = makeClosure(i);
}
return a;
}
function makeClosure(i) {
return function () {
var x = i;
return x;
}
}
关于javascript - Javascript 中的闭包 : assigning local variable doesn't work,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16765366/