При var callback читают общую переменную после цикла. Для значений 1, 2, 3 передайте текущий i аргументом таймеру или создайте отдельное замыкание.
Для цикла for с var и setTimeout определите, что будет выведено. Как изменить код, чтобы с var выводились значения 1, 2, 3, а не конечное значение счётчика?
При 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. Без исходного фрагмента нельзя назвать иной конкретный конечный счётчик, но причина остаётся общей.