Javascript 什么是直接参考?

Javascript 什么是直接参考?,javascript,reference,theory,Javascript,Reference,Theory,严格模式规则()之一规定: 当在严格模式代码中出现delete运算符时,如果其UniaryExpression是对变量、函数参数或函数名的直接引用,则会抛出SyntaxError 所以在这段代码中: delete x x是一个参考。(我知道这是因为)。但这是直接参考吗 还有,还有其他类型的参考资料吗?间接引用?(如果没有,那么使用“direct”这个词有什么意义?是的,有不同类型的参考()。例如,成员操作符()确实会导致引用的基值是baseReference的值,我将其称为“notdirect

严格模式规则()之一规定:

当在严格模式代码中出现
delete
运算符时,如果其UniaryExpression是对变量、函数参数或函数名的直接引用,则会抛出SyntaxError

所以在这段代码中:

delete x
x
是一个参考。(我知道这是因为)。但这是直接参考吗


还有,还有其他类型的参考资料吗?间接引用?(如果没有,那么使用“direct”这个词有什么意义?

是的,有不同类型的
参考
()。例如,成员操作符()确实会导致引用的基值是
baseReference
的值,我将其称为“notdirect”。“直接引用”将是标识符引用(,其中基值是一个环境记录。

如果我理解正确,任何未定义为属性的内容

这些应在控制台中引发错误或失败:

(function(){ 'use strict'; var x = '2'; delete x; })();
(function(){ 'use strict'; delete arguments[0]; })('2');

我的意思是,关于“直接引用”的其他类型的引用。(那么,给定一个直接引用,还有其他类型的引用不是直接引用吗?)该章没有提到这个术语。是的,可能是。直接引用是一个仅通过解析的引用,而间接引用是一个属性引用(例如,
obj.prop
),分两步进行解析:首先,对名称
“obj”
执行标识符解析,解析为对对象的引用,然后伪造一个新引用,该引用的基值为对象引用,名称为
“prop”
。是的,我想就是这样。即使你定义了一个全局变量,如果你只按名称引用它,它仍然会抛出。例如:
this.x=true;
(在全局代码中,所以
这个
是全局对象),现在
delete x
抛出,但是
delete this.x
没有。所以,重要的是在delete表达式中如何引用它,而不是它是否是全局属性。是的,我以为我在控制台测试时没有使用严格模式。修复了“直接引用”只是指没有点或下标符号的引用。V8称之为“非限定标识符”。@GGG是的,这听起来很合理。此外,当
delete x
时,Firefox抛出“SyntaxError:不推荐对非限定名称应用'delete'运算符”,这证实了你的说法。我现在想知道的是解决了什么问题。我甚至不知道你可以在严格模式之前删除非属性。我想,如果你删除了所有引用指向的对象,可能会引起一些混乱。@ErikReppen
delete
的设计目的是删除te属性。尝试删除变量和其他类型的直接引用是不正确的用法。默认情况下,JavaScript忽略此不正确用法,仅返回
false
。但是,当程序使用运算符(如
delete
)时,严格模式会抛出如果不正确,程序应该抛出-因此,严格模式做正确的事情。理想情况下,这应该是默认行为,但这会破坏一些现有(遗留)程序。这就是为什么通过严格模式选择加入此行为。啊,好吧。在Chrome中,至少可以在非严格模式下删除全局变量。