为什么let = 0有效但var = 0?

oco*_*mfd 26 javascript

为什么不呢

显示任何语法错误但

呢?(我在Safari上测试)

但是我试过了

但它有错误,似乎'let'不是已定义的变量.为什么会这样?

T.J*_*der 36

因为var一直是关键词,但却let没有.因此,当添加let到语言时,TC39委员会必须指定它,以便用作let标识符的现有代码不会中断.(他们的主要规则之一是"不要破坏网络",他们非常重视[谢天谢地].)

let上下文中的关键字也是如此,例如let声明,但也可以是标识符:

let a = 42;                // Keyword, due to context
let = "I'm an identifier"; // Identifier, due to context 
console.log(a);
console.log(let);
Run Code Online (Sandbox Code Playgroud)

注意在strict mode("use strict")中,let不能用作标识符; 在严格模式下let使用时引入严格模式的规范也保留了以及其他几个词(参见ECMAScript第5版§7.6.1.2),因为在该规范采用之前,当然没有严格模式代码存在,所以他们可以去做.(它没有保留最后成为关键字的每个单词,所以有时它们确实必须非常仔细地定义事物.例如,async即使在严格模式下,它也是一个完全有效的标识符,但在之前具有特殊含义function.)

"use strict";
let = "I'm an identifier"; // SyntaxError: Unexpected strict mode reserved word
console.log(let);
Run Code Online (Sandbox Code Playgroud)