--- sidebar_position: 11 --- # Область видимости (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