我试图验证我的JavaScript闭包不足,我发现了一些我无法理解的奇怪行为。
让我们写第一个循环:
var funcs = [];
for (var i = 0; i < 3; i++) {
funcs[i] = function() {
console.log("My value: " + i);
};
}
for (var j = 0; j < 3; j++) {
funcs[j]();
}
这将输出
My value: 3
My value: 3
My value: 3
这是我的预期。但现在让我们稍微改变第二个循环:
var funcs = [];
for (var i = 0; i < 3; i++) {
funcs[i] = function() {
console.log("My value: " + i);
};
}
for (var i = 0; i < 3; i++) { // i only changed the j var to i
funcs[i]();
}
输出将是:
My value: 0
My value: 1
My value: 2
有人可以解释一下为什么我在第二个例子中得到不同的结果吗?
这是我在angularjs中写的一个例子:http://plnkr.co/edit/CipIQe9x8QBX7AFg4xfI?p=preview