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