Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 标识符解析和简单赋值_Javascript - Fatal编程技术网

Javascript 标识符解析和简单赋值

Javascript 标识符解析和简单赋值,javascript,Javascript,让我们有一个简单的脚本: obj=new String('str');//1 obj.length;//2 在第1行,我们有一个简单的任务,评估如下: 计算PrimaryExpression:Identifier(obj在我的例子中)(未定义、obj、false)将作为结果返回 计算NewExpression新字符串('str')。通过rref GetValue(rref) 将第3步得到的值放入第1步得到的参考值 返回步骤4的结果 在这一行,obj-->“str”绑定不会添加到任何执行上下文的

让我们有一个简单的脚本:

obj=new String('str');//1
obj.length;//2
在第1行,我们有一个简单的任务,评估如下:

  • 计算PrimaryExpression:Identifier(
    obj
    在我的例子中)<代码>(未定义、obj、false)将作为结果返回
  • 计算NewExpression
    新字符串('str')。通过
    rref
  • GetValue(rref)
  • 将第3步得到的值放入第1步得到的参考值
  • 返回步骤4的结果
  • 在这一行,
    obj-->“str”
    绑定不会添加到任何执行上下文的环境记录中。但是当
    obj
    PrimaryExpression:Identifier
    将被评估为
    ('str',obj,false)
    类型引用,我们可以通过该引用获得
    'str'
    的属性

    问题:


    为什么
    PrimaryExpression:第2行的标识符
    将被评估为
    ('str',obj,false)

    这是一个不寻常的问题,但仍然很有趣

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

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

    确切地说,
    PutValue(V,W)
    其中
    isUnsolvedReference(V)
    true
    添加的属性返回到全局对象,属性名为
    getReferenceValue(V)
    ,值为
    W
    。全局对象的环境记录是对象环境记录,因此将属性添加到
    global
    并添加相应的绑定。我希望,我现在的理解是正确的。