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