Изучите лексическое окружение и запись окружения в Javascript 2021

Давайте сначала разберемся, что такое Lexical Environment & Environment Record в соответствии с различными версиями спецификации ECMAScript.

От ES2015 до ES2020 Спецификации:-…

Лексическое окружение:

  • Лексическое окружение — это тип спецификации, используемый для определения связи идентификаторов с определенными переменными и функциями на основе лексической структуры вложенности вашего кода.
  • Лексическое окружение состоит из двух компонентов:
    1. Запись среды

      Она записывает привязки идентификаторов, которые создаются в пределах области действия связанного с ней лексического окружения. Она называется EnvironmentRecord лексического окружения.

    2. Внешняя ссылка

      Ссылка на внешнюю среду (null в глобальной среде).

Концептуальный вид с использованием псевдокода:

executioncontext.environment = {
    environmentRecord: { 
    // storage
    <identifier> : <value>
    <identifier> : <value>
    }
    // reference to the parent environment
    outer: <...>    
}
Вход в полноэкранный режим Выход из полноэкранного режима

Примечание: — [[Environment]], созданная внутри Execution Context, имеет тип Lexical Environment
[ссылка на ES2020].

Согласно 12-му изданию спецификации ECMAScript2021:

Запись среды

  • Запись среды — это тип спецификации, используемый для определения связи идентификаторов с определенными переменными и функциями на основе лексической структуры вложенности вашего кода.
  • Каждая запись окружения имеет один компонент:
    1. Внешняя ссылка

      Поле [[OuterEnv]], которое является либо нулем, либо ссылкой на внешнюю запись среды.Концептуальный вид с использованием псевдокода:

executioncontext.environment = {
    // storage
    <identifier> : <value>,
    <identifier> : <value>,
    // reference to the parent environment
    outer: <...> 
}
Вход в полноэкранный режим Выход из полноэкранного режима

Примечание: — [[Environment]], созданный внутри Execution Context, имеет тип Environment Record [см. ES2021].

Давайте также разберемся в структуре контекста выполнения.

Контекст исполнения:

  • Контекст выполнения — это устройство спецификации, которое используется для отслеживания оценки кода во время выполнения.
  • Чтобы отслеживать ход выполнения связанного с ним кода, ему нужны различные компоненты состояния, такие как LexicalEnvironment, VariableEnvironment и т.д.

В псевдокоде:

ExecutionContext = {
    VariableEnvironment: { ... },
    LexicalEnvironment: { ... },
    // other components
}
Вход в полноэкранный режим Выход из полноэкранного режима

Примечание:

До ES2020 С ES2021
— Компонент LexicalEnvironment и компонент VariableEnvironment контекста выполнения всегда являются лексическими окружениями [ссылка на ES2020]. — Компоненты LexicalEnvironment component и VariableEnvironment контекста выполнения всегда являются записями среды [refer ES2021].

Резюме

Давайте сделаем краткий обзор всех шагов, которые мы выполняем в приведенном выше фрагменте кода.

  1. В ECMAScript2021 [[environment]], который создается внутри контекста выполнения, имеет тип Environment Record вместо Lexical Environment.
  2. Таким образом, компоненты LexicalEnvironment и VariableEnvironment контекста выполнения всегда являются Environment Records.

Завершение!!!

Спасибо за ваше время!!! Давайте общаться, чтобы учиться и расти вместе.
Github Twitter

Оцените статью
devanswers.ru
Добавить комментарий