Я понимаю, что 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
.