标识符解析和简单分配

时间:2013-12-21 23:19:44

标签: javascript

我们有一个简单的脚本:

obj=new String('str');//1
obj.length;//2

在第1行,我们有一个简单的赋值,其评估如下:

  1. 评估PrimaryExpression:标识符(在我的情况下为obj)。结果将返回(undefined, obj, false)
  2. 评估NewExpression new String('str');。用rref
  3. 表示评估结果
  4. GetValue(rref)
  5. 在步骤3中输入值以引用步骤1。
  6. 返回步骤4的结果。
  7. 此行obj-->'str'绑定不会添加到任何执行上下文的环境记录。但是,当obj PrimaryExpression:Identifier被评估为('str', obj, false)类型时,我们可以通过此引用获取'str'的属性。

    问题:

    为什么第2行的PrimaryExpression:Identifier obj会被评估为('str', obj, false)

1 个答案:

答案 0 :(得分:1)

对于SO来说,这是一个不同寻常的问题,但仍然很有趣。

你的问题的答案是它被添加到全局执行上下文中(假设这个脚本是整个程序)。

请参阅ecma spec section regarding Programs

步骤3为全局代码设置执行上下文,这是最初引用obj的上下文,PutValue操作在上面的步骤4中设置绑定。