Задача на var в цикле: почему выводится 5 пятёрок и как исправить?

В типичном цикле с var все отложенные callback замыкают одну переменную i, которая к моменту выполнения равна 5; let создаёт привязку для каждой итерации.

Короткий ответ

Что ответить на собеседовании

В типичном цикле с var все отложенные callback замыкают одну переменную i, которая к моменту выполнения равна 5; let создаёт привязку для каждой итерации.

Подробный разбор

Ответ с пояснениями

В типичном цикле с var все отложенные callback замыкают одну переменную i, которая к моменту выполнения равна 5; let создаёт привязку для каждой итерации.

Например:

for (let i = 0; i < 5; i++) {
  setTimeout(() => console.log(i), 0);
}

Так выводятся 0, 1, 2, 3, 4. Альтернатива для var — передать значение в отдельную функцию-обёртку. Объяснение предполагает асинхронный запуск после завершения цикла; без него результат может быть другим.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее