Логотип YeaHub

База вопросов

Собеседования

Тренажёр

База ресурсов

Обучение

Навыки

Войти

Выбери, каким будет IT завтра — вместе c нами!

YeaHub — это полностью открытый проект, призванный объединить и улучшить IT-сферу. Наш исходный код доступен для просмотра на GitHub. Дизайн проекта также открыт для ознакомления в Figma.

© 2026 YeaHub

Документы

Медиа

Назад
Вопрос про JavaScript: var, closure, loop

Что произойдёт при использовании var в цикле с асинхронным кодом?

Вопрос проверяет понимание областей видимости, замыканий и причин типичных ошибок в асинхронных циклах.

Короткий ответ

При использовании var в цикле все асинхронные колбэки будут ссылаться на одну и ту же переменную. К моменту выполнения асинхронного кода цикл уже завершится, и переменная будет иметь финальное значение. В результате вместо ожидаемых разных значений выводится одно и то же. Это происходит из-за функциональной, а не блочной области видимости var.

Длинный ответ

Проблема возникает из-за сочетания замыкания и области видимости var.

Определение

Определение: Замыкание (closure) — это ситуация, когда функция “запоминает” переменные из внешней области видимости и продолжает иметь к ним доступ позже.

Что делает var в цикле

  • var имеет функциональную, а не блочную область видимости

  • в цикле создаётся одна переменная, а не новая на каждую итерацию

Пример проблемы

for (var i = 0; i < 3; i++) {
  setTimeout(() => {
    console.log(i);
  }, 100);
}

Что произойдёт:

  1. Цикл выполнится полностью.

  2. i станет равным 3.

  3. Асинхронные колбэки выполнятся позже.

  4. Все они выведут 3.

Почему это неожиданно

Разработчик интуитивно ожидает:

0
1
2

но получает:

3
3
3

Где это чаще всего встречается

  • setTimeout / setInterval

  • обработчики событий в циклах

  • промисы, создаваемые внутри цикла

Вывод: при использовании var в асинхронных циклах все колбэки разделяют одну переменную, поэтому получают одно и то же итоговое значение.

Уровень

  • Рейтинг:

    5

  • Сложность:

    7

Навыки

  • JavaScript

    JavaScript

Ключевые слова

#var

#closure

#loop

Подпишись на React Developer в телеграм