8.1.1.1.5 SetMutableBinding ( N, V, S )

用于声明性环境记录的具体环境记录方法 SetMutableBinding 试图将名称为参数 N 的值的标识符的当前绑定的绑定值更改为参数 V 的值。对于 N 的绑定通常已经存在,但是很少情况可能不会如此。 如果绑定是不可变绑定,如果 S 为真,则抛出 TypeError

  1. 使 envRec 变为调用该方法的声明性环境记录。
  2. 如果 envRec 没有 N 的绑定,那么

a. 如果 Strue,则抛出一个 ReferenceError 错误。

b. 执行 envRec.CreateMutableBinding(N, true)。

c. 执行 envRec.InitializeBinding(N, V)。

d. 返回 NormalCompletion(empty)。

3.如果在 denver N 的绑定是严格绑定,则设为 S

4.如果 envRec 中的 N 的绑定尚未初始化,则抛出 ReferenceError 异常。

5.否则,如果denver中的N的绑定是可变绑定,则将其绑定值更改为 V。

6.否则,

a. 断言:这是一个尝试更改不可变绑定的值。

b. 如果 S 为 true,则抛出一个 TypeError 异常。

7.返回 NormalCompletion(empty)。

注意:导致在步骤2丢失绑定的ECMAScript代码的示例是:

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

results matching ""

    No results matching ""