Будет выведено 3 три раза: все callbacks читают одну переменную после завершения цикла. Замените var на let, чтобы каждая итерация получила свою привязку.
Почему цикл с var выводит одинаковые значения
Будет выведено 3 три раза: все callbacks читают одну переменную после завершения цикла. Замените var на let, чтобы каждая итерация получила свою привязку.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Условие
Что выведет код и как получить 0, 1, 2?
for (var i = 0; i < 3; i++) {
setTimeout(() => console.log(i), 0);
}
Ответ
Будет выведено 3 три раза: все callbacks читают одну переменную после завершения цикла. Замените var на let, чтобы каждая итерация получила свою привязку.
Таймер не прерывает синхронный цикл. К моменту вызова callbacks проверка i < 3 уже завершилась с i === 3. Исправление: for (let i = 0; i < 3; i++). Если необходим var, передайте текущее значение параметром отдельной функции: ((value) => setTimeout(() => console.log(value), 0))(i). Это создаёт новую локальную переменную для каждого callback.