ECMAScript | Декларативная Запись Среды | Метод SetMutableBinding ( N, V, S )

ECMAScript | Декларативная Запись Среды | Метод SetMutableBinding ( N, V, S )

SetMutableBinding ( N, V, S )

Конкретный метод SetMutableBinding (Установить изменяемую привязку), декларативной записи среды envRec принимает аргументы N (строка), V (значение языка ECMAScript) и S (логическое значение). Он пытается изменить связанное значение текущей привязки идентификатора, имя которого является значением аргумента N, на значение аргумента V. Обычно привязка для N уже существует, но в редких случаях может и не существовать. Если привязка является неизменной привязкой, выдается ошибка TypeError, если S имеет значение true. При вызове он выполняет следующие шаги:

1. Если envRec не имеет привязки для N, тогда
   а. Если S истинно true, выбросить исключение ReferenceError.
   b. Выполните envRec.CreateMutableBinding(N, true).
   c. Выполните envRec.InitializeBinding(N, V).
   d. Вернуть NormalCompletion(empty).
2. Если привязка для N в envRec является строгой привязкой, установите для S значение true.
3. Если привязка для N в envRec еще не инициализирована, вызовите исключение ReferenceError.
4. В противном случае, если привязка для N в envRec является изменяемой привязкой, измените ее значение привязки на V.
5. Иначе,
   a. Утверждено: это попытка изменить значение неизменяемой привязки.
   b. Если S истинно true, выбросить исключение TypeError.
6. Верните NormalCompletion(empty).
Примечание

Пример кода ECMAScript, который приводит к отсутствию привязки на шаге 1:

function f() { eval("var x; x = (delete x, 0);"); }

 

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

ECMAScript | Декларативные записи среды

Стандарт ECMAScript — Раздел «9.1.1.1 Declarative Environment Records» — https://tc39.es/ecma262/#sec-declarative-environment-records

Стандарт ECMAScript — Раздел «9.1.1.1.5 SetMutableBinding ( N, V, S )» — https://tc39.es/ecma262/#sec-declarative-environment-records-setmutablebinding-n-v-s