Логотип YeaHub

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

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

Тренажёр

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

Обучение

Навыки

Задачи

Войти

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

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

© 2026 YeaHub

AI info

Карта сайта

Документы

Медиа

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

Какая область видимости у переменных внутри callback-функции — там, где она вызывается, или там, где описана?

Вопрос проверяет понимание лексической области видимости в JavaScript и того, как замыкания определяют доступ к переменным.

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

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

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

Лексическая область видимости и замыкания

В JavaScript область видимости переменных определяется местом, где функция объявлена, а не местом её вызова. Это называется лексической (статической) областью видимости. Когда вы создаёте callback-функцию, она захватывает переменные из своего внешнего окружения на момент объявления, формируя замыкание.

Пример для понимания

function outer() {
  let message = 'Привет из outer';
  
  function callback() {
    console.log(message); // message доступна, так как callback объявлена внутри outer
  }
  
  return callback;
}

const fn = outer();
fn(); // Выведет: 'Привет из outer'

Здесь callback объявлена внутри outer, поэтому она имеет доступ к переменной message. Даже когда мы вызываем fn() в глобальной области, она всё равно использует message из outer.

Контраст с динамической областью видимости

Если бы JavaScript использовал динамическую область видимости, то переменные определялись бы местом вызова. В примере выше при вызове fn() в глобальной области message была бы не определена. Но благодаря лексической области видимости callback сохраняет доступ к своему исходному окружению.

Практическое применение

Это свойство широко используется в асинхронном программировании, обработчиках событий и функциях высшего порядка. Например, при передаче callback в setTimeout или addEventListener, функция запоминает переменные из места своего создания, что позволяет избежать ошибок с устаревшими данными.

Вывод

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

  • Аватар

    Python Guru

    Sergey Filichkin

    Guru – это эксперты YeaHub, которые помогают развивать комьюнити.

Уровень

  • Рейтинг:

    4

  • Сложность:

    4

Навыки

  • JavaScript

    JavaScript

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

#lexical scope

#closure

#callback

#JavaScript

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

  • Аватар

    Python Guru

    Sergey Filichkin

    Guru – это эксперты YeaHub, которые помогают развивать комьюнити.