Запись Среды (Environment Record) — это тип спецификации, используемый для определения ассоциации идентификаторов Identifiers с конкретными переменными и функциями на основе лексической структуры вложенности кода ECMAScript. Обычно Запись Среды связана с определённой синтаксической структурой кода ECMAScript, такой как:
- FunctionDeclaration
- BlockStatement
- предложение Catch в TryStatement
Каждый раз, когда такой код оценивается, создается новая Запись Среды для записи привязок идентификаторов, которые создаются этим кодом.
Каждая Запись Среды имеет поле [[OuterEnv]], которое либо равно null, либо является ссылкой на внешнюю Запись Среды. Это используется для моделирования логической вложенности значений Записи Среды. Внешняя ссылка записи среды (внутренней) — это ссылка на Запись Среды, которая логически окружает внутреннюю запись среды. Внешняя Запись Среды, конечно, может иметь свою собственную Внешнюю Запись Среды. Запись Среды может служить внешней средой для множества внутренних записей среды.
Например, если производство FunctionDeclaration содержит два вложенных производства FunctionDeclaration, тогда Записи Среды каждой из вложенных функций будут иметь в качестве своей внешней Записи Среды запись среды текущей оценки окружающей функции.
Записи Среды — это чисто механизмы спецификации и не обязательно должны соответствовать какому-либо конкретному артефакту реализации ECMAScript. Программа на ECMAScript не может напрямую обращаться к таким значениям или манипулировать ими.
Дополнительно
Для лучшего понимания Записи Среды рекомендую изучить:
- Иерархия типов записей среды
- Операции для работы с записями среды
Иерархия типов записей среды:
- Декларативные записи среды (Declarative Environment Records) — (Объявительные, отвечающие за объявление)
- Объектные записи среды (Object Environment Records)
- Функциональные записи среды (Function Environment Records)
- Глобальные записи среды (Global Environment Records)
- Модульные записи среды (Module Environment Records)
Операции для работы с записями среды:
- GetIdentifierReference ( env, name, strict )
- NewDeclarativeEnvironment ( E )
- NewObjectEnvironment ( O, W, E )
- NewFunctionEnvironment ( F, newTarget )
- NewGlobalEnvironment ( G, thisValue )
- NewModuleEnvironment ( E )
Информационные ссылки
Следующий раздел — ECMAScript | Иерархия типов записей среды
ECMAScript | Исполняемый Код и Контексты Выполнения
Стандарт ECMAScript — Раздел «9.1 Environment Records» — https://tc39.es/ecma262/#sec-environment-records