【发布时间】:2020-11-24 19:47:52
【问题描述】:
我知道let 可以防止重复声明,这很好。
let x;
let x; // error!
用let 声明的变量也可以用在可以预期的闭包中
let i = 100;
setTimeout(function () { console.log(i) }, i); // '100' after 100 ms
我有点难以理解的是let 如何应用于循环。这似乎特定于 for 循环。考虑经典问题:
// prints '10' 10 times
for (var i = 0; i < 10; i++) { process.nextTick(_ => console.log(i)) }
// prints '0' through '9'
for (let i = 0; i < 10; i++) { process.nextTick(_ => console.log(i)) }
为什么在这种情况下使用let 有效?在我的想象中,即使只有一个块可见,for 实际上会为每次迭代创建一个单独的块,并且 let 声明是在该块内完成的......但只有一个 let 声明来初始化值.这只是 ES6 的语法糖吗?这是如何工作的?
我了解var 和let 之间的区别,并在上面进行了说明。我特别想了解为什么使用 for 循环时不同的声明会导致不同的输出。
【问题讨论】:
-
您在问题中已经说了很多,
let基本上在每次循环迭代时都会重新评估。我不知道我会称它为语法糖,它只是定义循环的工作方式。 -
我在这里更正吗:让 i = 100; setTimeout(function () { console.log(i) }, i); // 100 ms 后的 '100' 我们也可以使用 var i = 100?