Запись Среды Модуля (module Environment Record) — это декларативная запись среды, которая используется для представления внешней области действия модуля ECMAScript. В дополнение к обычным изменяемым и неизменяемым привязкам, записи среды модуля также предоставляют неизменяемые привязки импорта, которые являются привязками, которые обеспечивают косвенный доступ к целевой привязке, существующей в другой Записи Среды.
Записи Среды Модуля поддерживают все методы декларативнойзаписи среды, перечисленные в таблице 17, и имеют одинаковые спецификации для всех этих методов, за исключением GetBindingValue, DeleteBinding, HasThisBinding и GetThisBinding. Кроме того, Запись Среды Модуля поддерживает методы, перечисленные в Таблице 23:
Метод | Цель | |
---|---|---|
CreateImportBinding(N, M, N2) | Создайте неизменяемую косвенную привязку в Записи Среды Модуля. Строковое значение N — это текст связанного имени. M — это запись модуля, а N2 — это привязка, которая существует в записи среды модуля M. | |
GetThisBinding() | Вернуть значение привязки this этой Записи Среды. |
Поведение дополнительных методов конкретной спецификации для Записи Среды Модуля определяется следующими алгоритмами:
- GetBindingValue ( N, S )
- DeleteBinding ( N )
- HasThisBinding ( )
- GetThisBinding ( )
- CreateImportBinding ( N, M, N2 )
GetBindingValue ( N, S )
Конкретный метод GetBindingValue (Получить значение привязки), модульной записи среды envRec принимает аргументы N (строка) и S (логическое значение). Он возвращает значение своего связанного идентификатора, имя которого является значением аргумента N. Однако, если привязка является косвенной привязкой, возвращается значение целевой привязки. Если привязка существует, но не инициализирована, выдается ошибка ReferenceError. При вызове он выполняет следующие шаги:
1. Утверждено: S является true. 2. Утверждено: envRec имеет привязку к N. 3. Если привязка для N является косвенной привязкой, то a. Пусть M и N2 будут значениями косвенного обращения, предоставленными при создании этой привязки для N. b. Пусть targetEnv будет M.[[Environment]]. c. Если targetEnv не определен (является undefined), выбросить исключение ReferenceError. d. Вернуть ? targetEnv.GetBindingValue(N2, true). 4. Если привязка для N в envRec является неинициализированной привязкой, вызовите исключение ReferenceError. 5. Вернуть значение, привязанное к N в envRec.
S всегда будет истинным true, потому что Модуль (Module) всегда является кодом в строгом режиме.
DeleteBinding ( N )
Конкретный метод DeleteBinding (Удалить привязку), модульной записи среды никогда не используется в этой спецификации.
Записи среды модуля используются только в строгом коде, и правило ранней ошибки предотвращает применение оператора удаления (delete) в строгом коде к ссылочной записи, которая могла бы разрешить привязку записи среды модуля. Смотри раздел 13.5.1.1.
HasThisBinding ( )
Конкретный метод HasThisBinding (Имеет привязку this), модульной записи среды envRec не принимает аргументов. При вызове он выполняет следующие шаги:
1. Вернуть true.
Записи среды модуля всегда предоставляют привязку this.
GetThisBinding ( )
Конкретный метод GetThisBinding (Получить привязку this), модульной записи среды envRec не принимает аргументов. При вызове он выполняет следующие шаги:
1. Вернуть undefined.
CreateImportBinding ( N, M, N2 )
Конкретный метод CreateImportBinding (Создать привязку импорта), модульной записи среды envRec принимает аргументы N (строка), M (запись модуля) и N2 (строка). Он создает новую инициализированную неизменяемую косвенную привязку для имени N. Привязка не должна еще существовать в этой записи среды для N. N2 — это имя привязки, которая существует в записи среды модуля M. Доступ к значению новой привязки будет косвенно обращаться к привязанному значению целевой привязки. При вызове он выполняет следующие шаги:
1. Утверждено: envRec еще не имеет привязки для N. 2. Утверждено: M - это запись модуля. 3. Утверждено: когда создается экземпляр M.[[Environment]], он будет иметь прямую привязку к N2. 4. Создайте неизменяемую косвенную привязку в envRec для N, которая ссылается на M и N2 как на целевую привязку, и запишите, что привязка инициализирована. 5. Верните NormalCompletion(empty).
Информационные ссылки
ECMAScript | Иерархия типов записей среды
Стандарт ECMAScript — Раздел «9.1.1.5 Module Environment Records» — https://tc39.es/ecma262/#sec-module-environment-records