Давайте сначала разберемся, что такое Lexical Environment
& Environment Record
в соответствии с различными версиями спецификации ECMAScript.
От ES2015 до ES2020 Спецификации:-…
Лексическое окружение:
- Лексическое окружение — это тип спецификации, используемый для определения связи идентификаторов с определенными переменными и функциями на основе лексической структуры вложенности вашего кода.
- Лексическое окружение состоит из двух компонентов:
-
Запись среды
Она записывает привязки идентификаторов, которые создаются в пределах области действия связанного с ней лексического окружения. Она называется EnvironmentRecord лексического окружения.
-
Внешняя ссылка
Ссылка на внешнюю среду (null в глобальной среде).
-
Концептуальный вид с использованием псевдокода:
executioncontext.environment = {
environmentRecord: {
// storage
<identifier> : <value>
<identifier> : <value>
}
// reference to the parent environment
outer: <...>
}
Примечание: — [[Environment]]
, созданная внутри Execution Context, имеет тип
Lexical Environment
[ссылка на ES2020].
Согласно 12-му изданию спецификации ECMAScript2021:
Запись среды
- Запись среды — это тип спецификации, используемый для определения связи идентификаторов с определенными переменными и функциями на основе лексической структуры вложенности вашего кода.
- Каждая запись окружения имеет один компонент:
-
Внешняя ссылка
Поле
[[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]. |
Резюме
Давайте сделаем краткий обзор всех шагов, которые мы выполняем в приведенном выше фрагменте кода.
- В ECMAScript2021
[[environment]]
, который создается внутри контекста выполнения, имееттип
Environment Record вместо Lexical Environment. - Таким образом, компоненты
LexicalEnvironment
иVariableEnvironment
контекста выполнения всегда являются Environment Records.
Завершение!!!
Спасибо за ваше время!!! Давайте общаться, чтобы учиться и расти вместе.
Github Twitter