Для цикла for с var и setTimeout определите, что будет выведено. Как изменить код, чтобы с var выводились значения 1, 2, 3, а не конечное значение счётчика?

При var callback читают общую переменную после цикла. Для значений 1, 2, 3 передайте текущий i аргументом таймеру или создайте отдельное замыкание.

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

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

При var callback читают общую переменную после цикла. Для значений 1, 2, 3 передайте текущий i аргументом таймеру или создайте отдельное замыкание.

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

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

При var callback читают общую переменную после цикла. Для значений 1, 2, 3 передайте текущий i аргументом таймеру или создайте отдельное замыкание.

Иллюстрация для цикла от 1 до 3:

for (var i = 1; i <= 3; i++) {
  setTimeout(value => console.log(value), 0, i);
}

Аргумент i вычисляется при планировании, поэтому callback получает сохранённое значение. При setTimeout(() => console.log(i), 0) все три callback увидели бы 4. Без исходного фрагмента нельзя назвать иной конкретный конечный счётчик, но причина остаётся общей.

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

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

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

Подробнее