Что такое ОБЪЕМ?

Область видимости — определяет доступность переменной, объекта, функции из разных частей кода.

Для приведенного выше кода переменная b находится в области действия функции a().

Итак, в основном есть два типа областей: 1: глобальная область 2: локальная область

Глобальная область видимости — когда переменная определена вне какой-либо скобки или блока. Локальная область видимости — когда переменная определена внутри функции или блока. И самое главное, к нему нельзя получить доступ за пределами области видимости.

Программирование, такое как c, java, javascript, следует статической области видимости.

Что такое Лексическое окружение?

Всякий раз, когда код javascript начинает выполняться, создается глобальный контекст выполнения для выполнения следующего кода, а также создается лексическая среда. Для каждого контекста создается лексическое окружение.

Таким образом, в основном лексическая среда представляет собой структуру данных, которая содержит сопоставление идентификатор-переменная. (здесь идентификатор относится к имени переменных/функций, а переменная является ссылкой на фактический объект [включая объект типа функции] или примитивное значение). и он также содержит ссылку на родительское лексическое окружение.

Лексическая среда состоит из двух частей: 1: локальная память 2: ссылка на родительскую среду.

Давайте рассмотрим следующий код.

Теперь, когда код javascript начинает выполняться, создается глобальный контекст выполнения, а также создается лексическая среда, и GEC помещается в стек вызовов, чтобы отслеживать контексты. Лексическое окружение, созданное во время GEC, имеет доступ к переменному окружению, а также указывает на родительское лексическое окружение, которое в данном случае равно null.

Теперь, когда код javascript начинает выполняться

  • Сначала доходит до 7 строки кода, она инициализирует значение переменной answer заданным значением.
  • Теперь с 8-й строки вызывается функция a(). В связи с этим будет создан локальный контекст выполнения, и он будет помещен в стек. Этот локальный контекст выполнения также будет иметь лексическую среду, которая будет иметь доступ к локальной памяти внутри этого контекста, а также ссылку на родительскую лексическую среду, которая является глобальным контекстом выполнения.

Теперь внутри этого локального контекста выполнения память будет выделена для переменной и функции, если она записана, а затем код начнет выполняться.

- 2-я строка будет выполнена, и будет вызвана новая функция b(), это приведет к новому локальному контексту выполнения, и это также будет помещено в стек.

Теперь, после всего этого, движок javascript начнет выполнять код внутри функции b(), который должен вывести ответ имени переменной.

Здесь внутри локального контекста выполнения функции b() нет имени переменной ответа, поэтому с помощью лексического окружения она перейдет в родительское лексическое окружение, предназначенное для функции a() и попытается найти переменную. Результат будет таким же, и он перейдет к родительскому лексическому окружению a(), которое является глобальным контекстом выполнения, и, следовательно, здесь он найдет значение переменной и напечатает значение переменный ответ. Эта завершенная вещь будет выглядеть примерно так (логически)

Это логическое представление того, как это может выглядеть.

Что такое цепочка масштабов?

В приведенном выше объяснении процесс, в котором вы пытаетесь найти переменную внутри памяти некоторого контекста, а затем переходите к родительскому лексическому окружению этого контекста, чтобы найти ту же переменную, а затем продолжаете делать это. Либо вы найдете переменную, либо достигнете родительского лексического окружения GEC, которое равно null. Этот полный процесс представляет собой цепочку областей действия. Красная линия на изображении выше показывает, как отслеживается цепочка областей действия.