【发布时间】:2014-12-05 22:56:31
【问题描述】:
这个片段将在 nodejs 和浏览器上运行而没有任何抱怨:
this.return = function ( x ) {
return x
};
console.log ( this.return(1) );
我原以为它会因语法错误而失败。
我的意思是,我可以理解为什么 this['return'] 有效.. 但我一直认为 return 是词法分析器关键字?
javascript 是一种上下文相关的语言吗?
添加:重点是词法分析器没有 T_RETURN 标记,而是使用了一些 T_STRING。不是吗?
【问题讨论】:
-
你也可以覆盖 undefined。不代表这是个好主意!编辑:从技术上讲,您不会覆盖 return。
-
我对解释器一无所知,但对我来说,在
.之后,任何可以被解析为标识符的东西都是有效的。 -
@Niet:对自己的解析有所了解,相反的方式让我感到惊讶——通常,词法分析(在纯语法级别将原始文本转换为标记流)是第一步,并且无论使用上下文如何,都会标记关键字。
-
这让我很吃惊,因为我似乎记得在使用
do作为属性名称之前遇到过问题,忘记了它是一个关键字。但我认为这可能是在对象文字中,所以我想它是不同的。我还记得它对不同浏览器的影响不同。 -
@JosiahKeller:区别在于从 ECMAScript 3 到 ECMAScript 5 的变化。ES5 中的对象文字可以毫无问题地使用关键字属性标识符。
标签: javascript language-design