为什么不
let=0
显示任何语法错误,但是
var=0
有吗? (我在 Safari 上测试)
但是我尝试过
console.log(let)
但它有错误,并且似乎“let”不是一个已经定义的变量。为什么会发生这种情况?
最佳答案
因为 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);
注意,在严格模式下("use strict"
),let
不能用作标识符;引入严格模式的规范还保留了在严格模式下使用时的 let
和其他一些单词(请参阅 ECMAScript 5th edition §7.6.1.2 ),因为当然在该规范采用之前不存在严格模式代码,所以他们可以做到这一点。 (它没有保留最终成为关键字的每个单词,因此有时他们确实必须非常仔细地定义事物。例如,async
是一个完美的即使在严格模式下也是有效的标识符,但在 function
之前具有特殊含义。)
"use strict";
let = "I'm an identifier"; // SyntaxError: Unexpected strict mode reserved word
console.log(let);
关于javascript - 为什么let=0有效但var=0无效?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48985212/