我知道这let
可以防止重复声明,这很好。
let x;
let x; // error!
用 with 声明的变量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
循环产生不同的输出特别感兴趣。