7

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

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

所以在这段代码中:

delete x

x是参考。(我知道这一点是因为“评估标识符的结果始终是引用类型的值”)。但它是直接参考吗?

而且,还有其他类型的参考吗?间接引用?(如果不是,那么使用“直接”这个词有什么意义?)

4

2 回答 2

1

是的,有不同的类型ReferencesEcmaScript §8.7)。例如,成员运算符(EcmaScript §11.2.1)确实会导致引用其基值是 的值baseReference,我称之为“非直接”。“直接引用”将是标识符引用(EcmaScript §10.2.2.1,其中基值是环境记录。

于 2012-09-26T21:01:28.493 回答
0

如果我理解正确,任何未定义为属性的东西。

这些应该在控制台中抛出错误或失败:

(function(){ 'use strict'; var x = '2'; delete x; })();
(function(){ 'use strict'; delete arguments[0]; })('2');
于 2012-09-26T21:24:11.997 回答