严格模式规则之一(Annex C)声明:
当
delete
运算符出现在严格模式代码中时,如果 UnaryExpression 是对变量,函数参数的直接引用,则抛出 SyntaxError ,或者功能名称。
所以在这段代码中:
delete x
x
是一个参考。 (我知道这是因为"the result of evaluating an Identifier is always a value of type Reference")。但这是直接参考吗?
还有其他类型的参考吗?间接引用? (如果没有,那么使用“直接”一词有什么意义?)
答案 0 :(得分:1)
是的,References
(EcmaScript §8.7)有不同种类。例如,成员运算符(EcmaScript §11.2.1)会生成基值是baseReference
的值的引用,我称之为“非直接”。 “直接引用”将是标识符引用(EcmaScript §10.2.2.1,其中基值是环境记录。
答案 1 :(得分:0)
如果我理解正确的话,任何未被定义为属性的东西。
这些应该在控制台中抛出错误或失败:
(function(){ 'use strict'; var x = '2'; delete x; })();
(function(){ 'use strict'; delete arguments[0]; })('2');