Три таймера выведут один и тот же итоговый массив [2, 2, 2]. Все callbacks замыкают общую переменную i, изменённую синхронным циклом.
Определите, какой вывод появится в консоли для кода №103
Три таймера выведут один и тот же итоговый массив [2, 2, 2]. Все callbacks замыкают общую переменную i, изменённую синхронным циклом.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Условие
Укажите, какой результат будет отображён в консоли после выполнения следующего фрагмента JavaScript‑кода:
for (var i = []; i.length < 3; i.push(2)) {
setTimeout(() => {
console.log(i);
}, i.length * 1000);
}
Ответ
Три таймера выведут один и тот же итоговый массив [2, 2, 2]. Все callbacks замыкают общую переменную i, изменённую синхронным циклом.
Задержки вычисляются при регистрации как 0, 1000 и 2000 мс. Но сами callbacks начнут выполняться только после завершения текущего стека, когда три push уже сделаны. Для снимка содержимого пришлось бы отдельно скопировать массив на каждой итерации.