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

eri*_*dal 11 javascript language-design

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

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

console.log ( this.return(1) );
Run Code Online (Sandbox Code Playgroud)

我期待它因语法错误而难以理解.

我的意思是,我能理解为什么this['return']有效......但我总是这return是一个词法分析器?

javascript是一种上下文敏感的语言?

补充说:重点是词法分析器没有T_RETURN标记,但它使用了一些T_STRING.是不是?

ade*_*neo 10

return是一个保留的关键字,但保留的关键字可以作为属性访问器使用,没有问题,这通常是不好的做法.

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

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

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

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

a.return
a["return"]
a = { return: "test" }.
Run Code Online (Sandbox Code Playgroud)

然而,这些不是

function return() {}
var return;
Run Code Online (Sandbox Code Playgroud)

有关MDN的更多信息

  • @ kittycat3141:我认为这是不好的做法,因为a)人们可能不习惯它(可能是你所指的)和b)代码不能在旧版本的IE8中运行.但是,一旦ES6发布(定义`Map#delete`),a)有望改变. (2认同)

Tra*_*s J 1

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

var return = "error";//Uncaught SyntaxError: Unexpected token return
Run Code Online (Sandbox Code Playgroud)