Какая разница в поведении между let и var в цикле for?
// Выведет 10 раз значение 10
for (var i = 0; i < 10; i++) {
// замыкание (к моменту запуска таймера переменная i уже равна 10)
setTimeout(function () {
console.log(i);
}, 0);
}
// Выведет последовательно 0,2,3,...,9
for (let i = 0; i < 10; i++) {
setTimeout(function () {
console.log(i);
}, 0);
}
При использовании в цикле, для каждой итерации создаётся своя переменная.
Переменная var – одна на все итерации цикла и видна даже после цикла.
С переменной let – всё по-другому. Каждому повторению цикла соответствует своя независимая переменная let. Если внутри цикла есть вложенные объявления функций, то в замыкании каждой будет та переменная, которая была при соответствующей итерации.