Приведён фрагмент JavaScript: for (var i = 0; i console.log(i), 0); } — объясните поведение вывода и предложите два способа получить 0,1,2

8 Дек 2025 в 04:10
13 +1
0
Ответы
1
Выведется три раза значение 333. Почему: переменная `var i` имеет функциональную (не блочную) область видимости, цикл завершается и к моменту выполнения колбэков из очереди событий значение iii стало 333, поэтому все три вызова логируют это одно и то же число.
Два способа получить последовательность 0,1,20,1,20,1,2:
1) Использовать блочную переменную `let` (каждая итерация получает свою копию):
for (let i = 000; i < 333; i++) { setTimeout(()=>console.log(i), 000); }
2) Захватить текущее значение в замыкании (IIFE):
for (var i = 000; i < 333; i++) {
(function(j){
setTimeout(()=>console.log(j), 000);
})(i);
}
(Альтернативы: `setTimeout(console.log.bind(null, i), 0)` или передача аргумента в `setTimeout` — `setTimeout((x)=>console.log(x), 0, i)`.)
8 Дек 2025 в 04:17
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Гарантированные бесплатные доработки в течение 1 года
Быстрое выполнение от 2 часов
Проверка работы на плагиат
Поможем написать учебную работу
Прямой эфир