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