这个剪辑将在nodejs和浏览器上没有任何抱怨的情况下运行:
this.return = function ( x ) {
return x
};
console.log ( this.return(1) );
我期待它因语法错误而难以理解。
我的意思是,我能理解为什么 this['return']
工作......但我总是这样 return
是lexer关键字?
javascript是一种上下文敏感的语言?
添加:重点是词法分析器没有T_RETURN标记,但它使用了一些T_STRING。是不是?
return
是一个 保留关键字,但保留的关键字可以用作 财产访问者 没有问题,这通常是不好的做法。
保留关键字可能不会被用作数组和对象的变量,函数,方法或标识符的名称,因为ECMAScript为它们指定了特殊行为:
来自ECMAScript脚本的源文本从左向右扫描并转换为一系列输入元素,即令牌,控制字符,行终止符,注释或空格。
ECMAScript还定义了某些关键字和文字,并具有自动将分号插入到结束语句的规则。
保留字实际上仅适用于标识符(与IdentifierNames对比)。
如中所述 ES5,这些都是不排除ReservedWords的IdentifierNames。
a.return
a["return"]
a = { return: "test" }.
但事实并非如此
function return() {}
var return;
有关MDN的更多信息
是的,return是一个关键字。您已经定义了一个属性,并且实际上使用了一个名为return如果你实际使用了返回它会导致错误
var return = "error";//Uncaught SyntaxError: Unexpected token return