Рассмотрите следующий пример на JavaScript (асинхронность):
async function f() {
for (var i = 0; i console.log(i), 100)

26 Ноя 2025 в 13:42
19 +1
0
Ответы
1
Выведет три раза число 333.
Почему: переменная `var i` — функциональная (не блочная), цикл `for` выполняется синхронно и к моменту срабатывания таймаутов (через примерно 100100100 мс) значение `i` уже стало 333. `async` тут ни на что не влияет: оно только делает `f()` возвращающей Promise, но не меняет поведения `var` и того, что таймеры выполняются позже.
Примерный порядок событий:
- цикл: i=0,1,2i=0,1,2i=0,1,2 — создаются три таймера;
- цикл завершён, iii стало 333;
- таймеры вызывают колбэки — все читают текущее i= ⁣3i=\!3i=3 и печатают 333.
Как исправить (чтобы печатались 0,1,20,1,20,1,2):
1) Использовать `let` (блочная переменная):
for (let i = 0; i console.log(i), 100);
2) Замыкание через IIFE:
for (var i = 0; i console.log(j), 100); })(i);
3) Передать аргумент в `setTimeout`:
for (var i = 0; i < 3; i++) setTimeout(console.log, 100, i);
Все три варианта выведут по очереди 000, 111, 222.
26 Ноя 2025 в 13:49
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Гарантированные бесплатные доработки в течение 1 года
Быстрое выполнение от 2 часов
Проверка работы на плагиат
Поможем написать учебную работу
Прямой эфир