【问题标题】:Environment record method CreateMutableBinding in JavaScriptJavaScript 中的环境记录方法 CreateMutableBinding
【发布时间】:2013-12-20 02:44:40
【问题描述】:

关于环境记录

sec. 10.2

环境记录记录了创建的标识符绑定 在其相关词汇环境的范围内。

sec 10.2.1

这里使用了两种环境记录值 规范:声明性环境记录和对象环境 记录。声明性环境记录用于定义效果 ECMAScript 语言语法元素,例如 FunctionDeclarations、VariableDeclarations 和 Catch 子句 直接将标识符绑定与 ECMAScript 语言相关联 价值观。对象环境记录用于定义效果 关联的 ECMAScript 元素,例如 Program 和 WithStatement 标识符与某些对象的属性绑定。

请检查我的理解:

因此,如果我们考虑以下代码sn-p:

function foo(){
    var bar={prop:'prop'}
    var test_bar=bar;
    test_test_bar={p:'p'};
}

相应的声明性环境记录将包含绑定bar-->{prop:'prop'}, test_bar-->{prop:'prop'}, test_test_bar-->{p:'p'}。是真的吗?

还有一个问题

对于所有句法元素是否只存在一个environment record。这是声明性或对象环境记录。

关于环境记录的抽象方法

Sec 10.2.1 包含有关environment record 的抽象方法的信息。

方法:

CreateMutableBinding(N, D)

目的:

在环境记录中创建一个新的可变绑定。字符串 值 N 是绑定名称的文本。如果可选的布尔值 参数 D 为真,绑定可能随后被删除。

所以问题如下:

在这个方法的目的中绑定名称是什么意思?它是一对Identifier-->variable,比如我上面例子中的bar-->{prop:'prop'}

【问题讨论】:

    标签: javascript


    【解决方案1】:

    考虑以下代码sn-p:

    function foo(){
        var bar={prop:'prop'}
        var test_bar=bar;
        test_test_bar={p:'p'};
    }
    

    相应的声明性环境记录将包含绑定 bar-->{prop:'prop'}, test_bar-->{prop:'prop'}, test_test_bar-->{p:'p'}。是真的吗?

    几乎。它确实包含foobartest_bar(及其值)。环境记录是词法环境的一部分,该环境有一个指向其“外部词法环境”的指针,该环境使用诸如test_test_bar 之类的全局变量保存记录。

    还有一个问题:对于所有句法元素是否只存在一个环境记录。

    没有。环境记录与句法元素没有太大关系,它们是在运行时在执行上下文中动态创建的。同一个代码元素也可能有多个活动的环境记录,比如在闭包中。规范所说的是:“环境记录用于定义 ECMAScript 语言语法元素的效果”。它们表示用于解释执行语法元素时应该发生什么的结构。

    在这个方法的目的中绑定名称是什么意思?它是一对Identifier-->variable,比如我上面例子中的bar-->{prop:'prop'}

    不,只是Identifier。这对标识符和值称为绑定。要将值分配给标识符,请使用 SetMutableBinding(bound_name, value, strict_flag) 方法。

    【讨论】:

      猜你喜欢
      • 2011-10-21
      • 2015-10-30
      • 1970-01-01
      • 1970-01-01
      • 2012-03-05
      • 1970-01-01
      • 2019-01-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多