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