【发布时间】:2016-12-12 13:53:39
【问题描述】:
有人解释一下(var 和 let in for 循环之间的行为差异)吗?
-
经典面试题(结语):
let a = []; for (var i=0; i<10; i++) { a[i] = function() { console.log(i,); } } a[0](); // 10 a[1](); // 10 -
如果我们使用 let:
let a = []; for (let i=0; i<10; i++) { // var => let a[i] = function() { console.log(i); } } a[0](); // 1 a[1](); // 2
是的,当使用“let”时,i 是正常的并且符合预期。 我想到的第一个想法是让不支持关闭。但是不,它支持。 (以下在 Chrome 上进行了测试):
function bb() {
let b = 1;
return function() {
console.log(b);
}
}
bb()(); // 1, means a closure is created
那么我的第二个解释是:在 for 循环中使用 let 时。对于每个循环,它都会重复创建一个新的 i。我在 chrome 调试器中证明了这一点。
问题是:
如果 i 在 for 循环中的每个循环中创建。怎么一直涨???如果每次都创建它,为什么它不会像我们声明的那样保持为 0?
for (let i=0; .......)
【问题讨论】:
-
@thefourtheye 感谢您的快速编辑!!!
-
也许再看看this question
-
请注意,在
for的括号中使用时,IE 不能正确执行let(但如果在for的正文中使用let则正确) . -
@Wickramaranga 这是一个涵盖大部分方面的好方法。谢谢!
-
@nnnnnn 感谢您指出“让在 IE 中”。我认为它解释了一些东西。这意味着括号与 { ... } 有所不同
标签: javascript for-loop ecmascript-6 closures