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

我正在尝试不明智的变量声明,并得出以下观察结果。


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

let let = 7;

不出所料,会导致错误:SyntaxError: let is disallowed as a lexically bound name


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

let const = 7;

导致不同的错误: SyntaxError: Unexpected token 'const'


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

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


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


牧羊人nacy
浏览 240回答 1
1回答

互换的青春

基本上是出于向后兼容性的原因。就像 Felix 所说的那样,const 是一个保留字——暂时是这样。像下面这样的代码是合法的 JavaScript(松散模式),因为let它只是一个单词:var let = 50; console.log(let);请注意,事实上,当添加严格模式时,let它被保留在其中:当以下标记出现在严格模式代码中时,也被视为 FutureReservedWords(请参阅 10.1.1)。储备让。有趣的是,ES3 规范中也保留了const 。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript