Что напечатает console.log в данном примере

Через примерно секунду число 10 будет выведено десять раз. Все callbacks обращаются к одной переменной var idx, которая к завершению цикла уже равна 10.

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

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

Через примерно секунду число 10 будет выведено десять раз. Все callbacks обращаются к одной переменной var idx, которая к завершению цикла уже равна 10.

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

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

Условие

Определите, какие числа появятся в выводе после выполнения следующего JavaScript‑кода:

for (var idx = 0; idx < 10; idx++) {
    setTimeout(function () {
        console.log(idx);
    }, 1000);
}

Ответ

Через примерно секунду число 10 будет выведено десять раз. Все callbacks обращаются к одной переменной var idx, которая к завершению цикла уже равна 10.

setTimeout регистрирует отложенный вызов, но не останавливает цикл. К моменту выполнения первого callback цикл полностью завершён. Замыкания сохраняют доступ к переменной, а не копию её значения в момент создания.

Замените var на let, чтобы получить отдельную привязку для каждой итерации и вывод 0–9. В старом синтаксисе можно передать текущий idx аргументом таймера или замкнуть его через отдельный вызов функции. Задержка 1000 мс — минимальная, не обещание точного времени.

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

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

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

Подробнее