我尝试了一些不可取的变量声明,得出了以下观察结果。
定义名称为'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规范中。