Почему следующий фрагмент JavaScript ведёт себя неожиданно, что он выведет и почему:
for (var i = 0; i console.log(i), 10)

20 Окт в 10:34
3 +1
0
Ответы
1

Выведет три раза (3).

Почему: var i имеет функциональную (не блочную) область видимости, поэтому все три колбека замыкают одну и ту же переменную i. К моменту, когда срабатывают таймауты (после ~(10) мс), цикл уже завершён и значение i стало (3), поэтому каждый console.log(i) печатает текущее значение — (3).

Как исправить (варианты):

Использовать блочную переменную: for (let i = 0; i < 3; i++) setTimeout(() => console.log(i), 10) — выведет (0,\,1,\,2).Закрыть текущее значение в замыкании: for (var i = 0; i < 3; i++) (function(x){ setTimeout(()=>console.log(x), 10); })(i);Передать аргумент в setTimeout (поддерживается во многих средах): for (var i = 0; i < 3; i++) setTimeout((x)=>console.log(x), 10, i);
20 Окт в 11:01
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Гарантированные бесплатные доработки в течение 1 года
Быстрое выполнение от 2 часов
Проверка работы на плагиат
Поможем написать учебную работу
Прямой эфир