ECMAScript | Глобальная Запись Среды | Метод CreateGlobalFunctionBinding ( N, V, D )

CreateGlobalFunctionBinding ( N, V, D )

Конкретный метод CreateGlobalFunctionBinding (Создать привязку глобальной функции), глобальной записи среды envRec принимает аргументы N (строка), V (значение языка ECMAScript) и D (логическое значение). Он создает и инициализирует изменяемую привязку в связанной записи среды объекта и записывает связанное имя в связанный список [[VarNames]]. Если привязка уже существует, она заменяется. При вызове он выполняет следующие шаги:

1. Пусть ObjRec будет envRec.[[ObjectRecord]].
2. Пусть globalObject будет ObjRec.[[BindingObject]].
3. Пусть existingProp будет ? globalObject.[[GetOwnProperty]](N).
4. Если existingProp является undefined или existingProp.[[Configurable]] имеет значение true, то
   a. Пусть desc будет PropertyDescriptor { [[Value]]: V, [[Writable]]: true, [[Enumerable]]: true, [[Configurable]]: D }.
5. Иначе,
   a. Пусть desc будет PropertyDescriptor { [[Value]]: V }.
6. Выполнить ? DefinePropertyOrThrow(globalObject, N, desc).
7. Выполнить ? Set(globalObject, N, V, false).
8. Пусть varDeclaredNames будет envRec.[[VarNames]].
9. Если varDeclaredNames не содержит N, то
   a. Добавить N к varDeclaredNames.
10. Вернуть NormalCompletion(empty).
Примечание

Объявления глобальных функций всегда представлены как собственные свойства глобального объекта. Если возможно, существующее собственное свойство реконфигурируется, чтобы иметь стандартный набор значений атрибутов. Шаг 7 эквивалентен вызову конкретного метода InitializeBinding, и если globalObject является Proxy, будет создана такая же последовательность вызовов ловушки Proxy.

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

ECMAScript | Глобальные записи среды

Стандарт ECMAScript — Раздел «9.1.1.4 Global Environment Records» — https://tc39.es/ecma262/multipage/executable-code-and-execution-contexts.html#sec-global-environment-records

Стандарт ECMAScript — Раздел «9.1.1.4.18 CreateGlobalFunctionBinding ( N, V, D )» —  https://tc39.es/ecma262/multipage/executable-code-and-execution-contexts.html#sec-createglobalfunctionbinding

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