Skip to main content

Область видимости (scope)

В JavaScript область видимости (scope) определяет, где переменные, функции и другие идентификаторы могут быть использованы в коде. Понимание области видимости важно для написания корректного и предсказуемого кода. В JavaScript есть несколько типов областей видимости:

  1. Глобальная область видимости (Global Scope)
    Переменные, объявленные вне всех функций или блоков, находятся в глобальной области видимости. Они доступны из любого места в коде.
  2. Локальная область видимости (Function Scope)
    Переменные, объявленные внутри функции, доступны только внутри этой функции. Это называется function scope.
  3. Блочная область видимости (Block Scope)
    С появлением let и const в ES6 появилась блочная область видимости. Переменные, объявленные внутри блока (например, внутри ), доступны только внутри этого блока.
    Обратите внимание, что var не имеет блочной области видимости
  4. Лексическая область видимости (Lexical Scope)
    JavaScript использует лексическую (статическую) область видимости. Это означает, что область видимости определяется во время написания кода, а не во время выполнения. Вложенные функции имеют доступ к переменным из внешних функций.
  5. Область видимости модулей (Module Scope) В ES6 появились модули, которые имеют свою собственную область видимости. Переменные, объявленные в модуле, не доступны извне, если они не экспортированы.
  6. Цепочка областей видимости (Scope Chain) Когда JavaScript ищет переменную, он сначала проверяет текущую область видимости, затем переходит к внешним областям, пока не достигнет глобальной области. Если переменная не найдена, возникает ошибка.
  7. Замыкания (Closures) Замыкание — это функция, которая запоминает свое лексическое окружение даже после того, как внешняя функция завершила выполнение. Это возможно благодаря области видимости.
  • Глобальная область видимости: переменные доступны везде.
  • Локальная (function scope): переменные доступны только внутри функции.
  • Блочная (block scope): переменные доступны только внутри блока (), если объявлены через let или const.
  • Лексическая область видимости: вложенные функции имеют доступ к переменным из внешних функций.
  • Модульная область видимости: переменные в модулях изолированы.

🚀 Источник: DeepSeek