ES6 不允许的变量名称 - 为什么名称'let'和"const"的行为不同?



我尝试了一些不可取的变量声明,得出了以下观察结果。


定义名称为'let'的变量,如下所示:

let let = 7;

毫不奇怪地导致了错误:CCD_ 2。


尝试对变量名'const'执行相同操作,如下所示:

let const = 7;

导致不同的错误:CCD_ 4。


查看规范,第13.3.1.1节静态语义:早期错误不允许'let'作为此类声明中的变量名(未提及'const'(。

这更多的是一种好奇,但幕后发生了什么,这会使'let'只被视为一个不允许的变量名,而使'const'被解释为一个令牌?


(顺便说一句,var let = 7似乎是语法正确的JavaScript,而var const = 7也会导致错误SyntaxError: Unexpected token 'const'(

主要是出于向后兼容性的原因。正如费利克斯所说,const是一个保留词——现在已经有一段时间了。

下面这样的代码是合法的JavaScript(在松散模式下(,因为let只是一个词:

var let = 50;
console.log(let);

请注意,实际上,当添加严格模式时,let在其内部保留:

当以下令牌出现在严格模式代码中时,它们也被认为是FutureReservedWords(见10.1.1(

保留出租。

有趣的是,const也保留在ES3规范中。

最新更新