Кирилл Хаим Щербина

Вы в 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. Лексический означает «имеющий отношение к словам», и для лексической области видимости важно, где мы, программисты, напечатали объявление функции в нашем коде.

Дайте хлопок, если понравилось! Увидимся в следующий раз!!