我理解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
在每次循环迭代时本质上都会重新评估。我不知道我是否应该称其为语法糖,这只是循环定义的工作方式。 - loganfsmyth