0

Если переменная объявлена с помощью var, то следующий код в консоль выводит 3 раза 3

for (var i = 0; i < 3; i++) {
 setTimeout(() => console.log(i), 5000); // => Результат: 3 3 3
}

Но если переменная объявлена с помощью let, то в консоль выводит 0, 1, 2.

for (let i = 0; i < 3; i++) {
 setTimeout(() => console.log(i), 5000); // => Результат: 0 1 2
}

Я знаю, что код внутри setTimeout отрабатывает после того, как весь остальной код отработал. Соответственно, на момент выполнения setTimeout, i, объявленная как глобальная переменная, будет существовать и будет равна 3, поэтому в консоль выводит 3 раза 3. Но в моем понимании, переменная, объявленная с помощью let имеет блочную область видимости и соответственно на момент выполнения setTimeout должна быть undefined. Что я понимаю неправильно и где я могу почитать об этой особенности языка более подробно? Заранее спасибо!

0 Answers0