Javascript ES6不允许的变量名称-为什么名称是';让';和';常数' ;表现不同?

Javascript ES6不允许的变量名称-为什么名称是';让';和';常数' ;表现不同?,javascript,ecmascript-6,Javascript,Ecmascript 6,我在玩弄不明智的变量声明,并得出以下结论 定义一个名为'let'的变量,如下所示: let=7; 不出所料,这会导致错误:SyntaxError:let不允许作为词汇绑定名称 尝试对变量名'const'执行相同操作,如下所示: let const=7; 导致不同的错误:语法错误:意外标记“const” 查看规范,部分不允许将'let'作为此类声明中的变量名(未提及'const') 这更令人好奇,但幕后发生了什么,这会使'let'仅仅被视为不允许的变量名,而使'const'被解释为令牌

我在玩弄不明智的变量声明,并得出以下结论


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

let=7;
不出所料,这会导致错误:
SyntaxError:let不允许作为词汇绑定名称


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

let const=7;
导致不同的错误:
语法错误:意外标记“const”


查看规范,部分不允许将
'let'
作为此类声明中的变量名(未提及
'const'

这更令人好奇,但幕后发生了什么,这会使
'let'
仅仅被视为不允许的变量名,而使
'const'
被解释为令牌



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

基本上是出于向后兼容的原因。就像菲利克斯所说的——一段时间

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

var let=50;
控制台日志(let);
请注意,当添加了严格模式时,
let
被保留在其内部:

当以下标记出现在严格模式代码中时,也被视为FutureReservedWord(见10.1.1)

储备出租


因为ES3规范中也保留了一个有趣的事实。

const
是一个,而
let
不是。谢谢@FelixKling!查看已将
const
作为保留字而不是
let
,我认为
let
是出于向后兼容的原因而被忽略的。
let
声明实际上也会导致严格模式下的错误(
SyntaxError:Unexpected strict mode reserved word
)。