Будет десять сообщений со значением −1. let здесь объявлена снаружи while, поэтому все callbacks обращаются к одной общей переменной.
Что покажет консоль после выполнения кода?
Будет десять сообщений со значением −1. let здесь объявлена снаружи while, поэтому все callbacks обращаются к одной общей переменной.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Условие
Укажите, какие значения будут выведены в консоль при запуске следующего JavaScript‑фрагмента:
let counter = 10;
while (counter--) {
setTimeout(() => {
console.log(counter);
});
}
Ответ
Будет десять сообщений со значением −1. let здесь объявлена снаружи while, поэтому все callbacks обращаются к одной общей переменной.
На последней успешной итерации counter уменьшается с 1 до 0. Затем условие while(counter--) ещё раз проверяет старый 0, завершая цикл, и одновременно уменьшает переменную до -1.
Таймеры выполняются только после завершения синхронного цикла и видят это финальное значение. Сам по себе let не создаёт отдельной переменной для каждой итерации while; для снимка объявите const value = counter внутри тела и замкните его.