奇怪的Javascript闭包循环行为

时间:2014-10-17 07:13:06

标签: javascript angularjs

我试图验证我的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

0 个答案:

没有答案