ECMAScript | Операции Записи Среды

Следующие абстрактные операции используются в этой спецификации для работы с записями среды:

GetIdentifierReference ( env, name, strict )

Абстрактная операция GetIdentifierReference (Получить ссылку на идентификатор) принимает аргументы env (Запись Среды или null), name (строка) и strict (логическое значение). При вызове он выполняет следующие шаги:

1. Если env имеет значение null, тогда
   a. Вернуть Ссылочную Запись {[[Base]]: unresolvable, [[ReferencedName]]: name, [[Strict]]: strict, [[ThisValue]]: empty} ".
2. Пусть exists будет ? env.HasBinding(name).
3. Если exists верно true, то
   a. Вернуть Ссылочную Запись {[[Base]]: env, [[ReferencedName]]: name, [[Strict]]: strict, [[ThisValue]]: empty} ".
4. Иначе,
   a. Пусть outer будет env.[[OuterEnv]].
   b. Возвращаться ? GetIdentifierReference(outer, name, strict).

 

NewDeclarativeEnvironment ( E )

Абстрактная операция NewDeclarativeEnvironment (Новая декларативная среда) принимает аргумент E (Запись Среды). При вызове он выполняет следующие шаги:

1. Пусть env будет новой декларативной записью среды, не содержащей привязок.
2. Установите env.[[OuterEnv]] на E.
3. Вернуть env.

 

NewObjectEnvironment ( O, W, E )

Абстрактная операция NewObjectEnvironment (Новая объектная среда) принимает аргументы O (объект), W (логическое значение) и E (Запись Среды или значение null). При вызове он выполняет следующие шаги:

1. Пусть env будет новой объектной записью среды.
2. Установите для env.[[BindingObject]] значение O.
3. Установите для env.[[IsWithEnvironment]] значение W.
4. Установите env.[[OuterEnv]] на E.
5. Вернуть env.

 

NewFunctionEnvironment ( F, newTarget )

Абстрактная операция NewFunctionEnvironment (Новая функциональная среда) принимает аргументы F и newTarget. При вызове он выполняет следующие шаги:

1. Утверждено: F является функцией ECMAScript.
2. Утверждено: Тип(newTarget) является Undefined или Object.
3. Пусть env будет новой функциональной записью среды, не содержащей привязок.
4. Установите для env.[[FunctionObject]] значение F.
5. Если F.[[ThisMode]] является lexical (лексическим), установите env.[[ThisBindingStatus]] в lexical.
6. В противном случае установите для env.[[ThisBindingStatus]] значение uninitialized (неинициализированное).
7. Установите для env.[[NewTarget]] значение newTarget.
8. Установите для env.[[OuterEnv]] значение F.[[Environment]].
9. Вернуть env.

 

NewGlobalEnvironment ( G, thisValue )

Абстрактная операция NewGlobalEnvironment (Новая глобальная среда) принимает аргументы G и thisValue. При вызове он выполняет следующие шаги:

1. Пусть objRec будет NewObjectEnvironment(G, false, null).
2. Пусть dclRec будет новой декларативной записью среды, не содержащей привязок.
3. Пусть env станет новой глобальной записью среды.
4. Установите для env.[[ObjectRecord]] значение objRec.
5. Установите для env.[[GlobalThisValue]] значение thisValue.
6. Установите для env.[[DeclarativeRecord]] значение dclRec.
7. Установите env.[[VarNames]] в новый пустой список.
8. Установите для env.[[OuterEnv]] значение null.
9. Вернуть env.

 

NewModuleEnvironment ( E )

Абстрактная операция NewModuleEnvironment (Новая модульная среда) принимает аргумент E (Запись Среды). При вызове он выполняет следующие шаги:

1. Пусть env будет новой модульной средой, не содержащим привязок.
2. Установите env.[[OuterEnv]] на E.
3. Вернуть env.

Информационные ссылки

ECMAScript | Записи среды

ECMAScript | Иерархия типов записей среды

Стандарт ECMAScript — Раздел «9.1.2 Environment Record Operations» — https://tc39.es/ecma262/#sec-environment-record-operations

Поделись записью