Explicação do `let` e do escopo do bloco com loops for

Eu entendi aquilolet impede declarações duplicadas, o que é legal.

let x;
let x; // error!

Variáveis declaradas comlet também pode ser usado em fechamentos esperados

let i = 100;
setTimeout(function () { console.log(i) }, i); // '100' after 100 ms

O que eu tenho um pouco de dificuldade em entender é comolet aplica-se a loops. Isso parece ser específico parafor rotações. Considere o problema clássico:

// 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)) }

Por que usarlet neste contexto funciona? Na minha imaginação, mesmo que apenas um bloco seja visível,for na verdade, cria um bloco separado para cada iteração e olet declaração é feita dentro desse bloco ... mas há apenas umlet declaração para inicializar o valor. Isso é apenas açúcar sintático para o ES6? Como isso está funcionando?

Eu entendo as diferenças entrevar elet e os ilustramos acima. Estou particularmente interessado em entender por que as diferentes declarações resultam em saídas diferentes usando umfor ciclo.

questionAnswers(3)

yourAnswerToTheQuestion