Логотип YeaHub

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

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

Тренажёр

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

Обучение

Навыки

Задачи

Войти

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

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

© 2026 YeaHub

AI info

Карта сайта

Документы

Медиа

Назад
Вопрос про JavaScript: closure, async, callback, scope, let

Как передать текущее значение переменной в асинхронный колбэк?

Вопрос проверяет понимание замыканий и асинхронности в JavaScript, а также умение правильно захватывать значение переменной в колбэке.

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

Проблема возникает из-за того, что var не имеет блочной области видимости, и все колбэки ссылаются на одну и ту же переменную. Решение — использовать let, который создаёт новую привязку на каждой итерации, или обернуть колбэк в немедленно вызываемую функцию (IIFE), передавая текущее значение как аргумент.

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

Проблема захвата переменной в цикле

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

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

for (var i = 0; i < 3; i++) {
  setTimeout(() => console.log(i), 100);
}
// Вывод: 3, 3, 3

Решение с let

Использование let создаёт новую привязку переменной для каждой итерации цикла, поэтому каждый колбэк получает своё значение.

for (let i = 0; i < 3; i++) {
  setTimeout(() => console.log(i), 100);
}
// Вывод: 0, 1, 2

Решение с замыканием (IIFE)

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

for (var i = 0; i < 3; i++) {
  (function(value) {
    setTimeout(() => console.log(value), 100);
  })(i);
}
// Вывод: 0, 1, 2

Вывод

Используйте let для простоты и читаемости кода, а IIFE — когда требуется совместимость с ES5 или работа с var.

Frontend developer

tech
tech
tech
tech
tech
tech
tech
tech
tech

Ментор по Frontend

Полное сопровождение до оффера — без дорогих курсов, с оплатой после трудоустройства

Записаться на консультацию

Уровень

  • Рейтинг:

    4

  • Сложность:

    4

Навыки

  • JavaScript

    JavaScript

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

#closure

#async

#callback

#scope

#let

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

Frontend developer

tech
tech
tech
tech
tech
tech
tech
tech
tech

Ментор по Frontend

Полное сопровождение до оффера — без дорогих курсов, с оплатой после трудоустройства

Записаться на консультацию