Кирилл Хаим Щербина
Вы в SCOPE?
ОБЛАСТЬ
GLOBAL SCOPE — это контекст, который неявно охватывает весь код JS в проекте. Переменные и функции, объявленные в глобальной области видимости, доступны в любом месте кода.
ОБЛАСТЬ ФУНКЦИИ — когда мы объявляем новую функцию, все, что написано в этой функции, больше не находится в глобальной области видимости. Таким образом, извне функции мы не можем ссылаться ни на что, декальированное в функции.
function myFunc () { const myVar = 42; } // => undefined myVar * 2; // Uncaught ReferenceError: myVar is not defined
БЛОЧНАЯ ОБЛАСТЬ — начиная с ES6 JavaScript поддерживает «блочную область видимости», когда оператор блока также создает свою собственную область. Однако переменные, объявленные с помощью var, НЕ блокируются:
if (true) { var myVar = 42; } myVar; // => 42
Но переменная, объявленная с помощью const или let, имеет блочную область видимости:
if (true) { const myVar = 42; let myOtherVar = 9001; } myVar; // Uncaught ReferenceError: myVar is not defined myOtherVar; // Uncaught ReferenceError: myOtherVar is not defined
Вот удобный график:
ВЛОЖЕННЫЕ ОБЛАСТИ ОБЛАСТИ И ЦЕПОЧКА ОБЛАСТИ
Когда мы вызываем функцию внутри функции, новая функция имеет доступ к переменным и функциям, объявленным во внешней области видимости.
ПРИМЕЧАНИЕ. Цепочка областей видимости идет только в одном направлении. Внешняя область не имеет доступа к вещам, объявленным во внутренней области.
Причина вышеизложенного заключается в том, что JavaScript на ЭТАПЕ КОМПИЛЯЦИИ добавляет ссылку на родительскую область (внешнюю среду) в цепочку областей видимости, делая переменные и функции, объявленные во внешней среде, доступными в области действия новой функции. Затем на ЭТАПЕ ВЫПОЛНЕНИЯ фактические значения присваиваются переменным.
ЛЕКСИЧЕСКАЯ ОБЛАСТЬ ПРИМЕНЕНИЯ
Функции JavaScript не заботятся о том, где они вызываются. Единственное, что имеет значение, это то, где они объявлены. Когда мы объявляем новую функцию, она спрашивает: «Где я был создан?» Ответом на этот вопрос является внешняя среда (внешняя область видимости), которая сохраняется в цепочке областей видимости новой функции.
Это называется лексической областью действия, а лексическое окружение является синонимом области видимости, с которой вы можете столкнуться в дополнительных материалах по JavaScript. Лексический означает «имеющий отношение к словам», и для лексической области видимости важно, где мы, программисты, напечатали объявление функции в нашем коде.
Дайте хлопок, если понравилось! Увидимся в следующий раз!!