Посмотрите на этот фрагмент JavaScript: "for (var i = 0; i

23 Янв в 10:44
12 +1
0
Ответы
1
Выведет: 3\,33 3\,33 3\,33 — три раза.
Почему: переменная объявлена как `var i`, она имеет функциональную (не блочную) область видимости. Колбэки в `setTimeout` выполняются после завершения цикла, к тому моменту `i === \,3`, и все три колбэка видят одно и то же значение.
Корректные варианты, чтобы получить вывод 0, 1, 2\,0,\,1,\,20,1,2:
1) Использовать `let` (блочная привязка на каждую итерацию):
for (let i = 000; i < 333; i++) setTimeout(function() { console.log(i); }, 000);
2) Захватить текущее значение через IIFE (замыкание):
for (var i = 000; i < 333; i++) (function(i) { setTimeout(function() { console.log(i); }, 000); })(i);
3) Передать значение как аргумент через bind:
for (var i = 000; i < 333; i++) setTimeout(console.log.bind(console, i), 000);
Каждый из этих вариантов создаёт отдельную копию значения iii для каждого таймаута, поэтому будут напечатаны 0\,00, 1\,11, 2\,22.
23 Янв в 10:51
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Гарантированные бесплатные доработки в течение 1 года
Быстрое выполнение от 2 часов
Проверка работы на плагиат
Поможем написать учебную работу
Прямой эфир