这个snip将在nodejs和浏览器上运行而不会有任何抱怨:
this.return = function ( x ) {
return x
};
console.log ( this.return(1) );
我预计它会因语法错误而失败。
我的意思是,我能理解为什么this['return']
有效......但我总是认为return
词法分析器关键字?
JavaScript 是一种上下文相关的语言吗?
补充:关键是词法分析器没有T_RETURN令牌,但它使用一些T_STRING。不是?
> return
是一个保留关键字,但保留关键字可以毫无问题地用作属性访问器,这样做通常是不好的做法。
保留关键字不能专门用作变量、函数、方法或数组和对象的标识符的名称,因为 ECMAScript 为它们指定了特殊行为:
来自 ECMAScript 脚本的源文本从左到右扫描,并转换为一系列输入元素,这些元素是标记、控制字符、行终止符、注释或空格。
ECMAScript 还定义了某些关键字和文字,并具有自动将分号插入到结束语句的规则。
保留字实际上仅适用于标识符(相对于标识符名称)。
如 ES5 中所述,这些都是不排除保留字的标识符名称。
a.return
a["return"]
a = { return: "test" }.
然而,这些不是
function return() {}
var return;
更多关于 MDN 的信息
是的,return 是一个关键字。您已经定义了一个属性,并且实质上使用了一个名为 return 的字符串。如果您实际使用退货,则会导致错误
var return = "error";//Uncaught SyntaxError: Unexpected token return