为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

牧羊人nacy 2023-08-05 19:27:13
我正在尝试不明智的变量声明,并得出以下观察结果。定义一个名为 的变量'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'。)
查看完整描述

1 回答

?
互换的青春

TA贡献1797条经验 获得超6个赞

基本上是出于向后兼容性的原因。就像 Felix 所说的那样,const 是一个保留字——暂时是这样。

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

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

请注意,事实上,当添加严格模式时,let它被保留在其中:

当以下标记出现在严格模式代码中时,也被视为 FutureReservedWords(请参阅 10.1.1)。

储备让。

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


查看完整回答
反对 回复 2023-08-05
  • 1 回答
  • 0 关注
  • 210 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信