是javascript的`return`真的是*关键字*?

时间:2014-12-05 22:56:31

标签: javascript language-design

这个剪辑将在nodejs和浏览器上没有任何抱怨的情况下运行:

this.return = function ( x ) { 
    return x 
};

console.log ( this.return(1) );

我原本期望它因语法错误而失败。

我的意思是,我可以理解为什么this['return']有效..但我总是return是lexer关键字?

javascript是一种上下文相关的语言吗?

添加:重点是词法分析器没有T_RETURN标记,但它使用了一些T_STRING。不是

2 个答案:

答案 0 :(得分:10)

return是一个reserved keyword,但保留的关键字可以作为property accessors使用,没有问题,这通常是不好的做法。

保留关键字可能不会被用作数组和对象的变量,函数,方法或标识符的名称,因为ECMAScript为它们指定了特殊行为:

来自ECMAScript脚本的源文本从左向右扫描并转换为一系列输入元素,即标记,控制字符,行终止符,注释或空格。

ECMAScript还定义了某些关键字和文字,并且有自动将分号插入到结束语句的规则。

保留字实际上仅适用于标识符(与标识符号对比) 如ES5中所述,这些都是不排除ReservedWords的IdentifierNames。

a.return
a["return"]
a = { return: "test" }.

然而,这些不是

function return() {}
var return;

More on MDN

答案 1 :(得分:1)

是的,return是一个关键字。您已定义了一个属性,并且实际上使用了一个名为return的字符如果你实际使用了返回它会导致错误



var return = "error";//Uncaught SyntaxError: Unexpected token return