在JavaScript中为“ let”分配一个值

Rai*_*sen 8 javascript

我在Chrome开发者工具中玩耍,并尝试了以下代码:

let = 1;
let x = 2;

console.log(let); // 1
console.log(x); // 2
Run Code Online (Sandbox Code Playgroud)

如果我将“ let”替换为“ var”,则以上代码将不起作用。

我假设这let = 1与相同var let = 1。如果是这样,不let x = 2应该翻译成1 x = 2错误吗?

Tyl*_*per 10

我假设这let = 1var let = 1

它声明一个变量,但相同。此处的主要区别在于,通过省略诸如varlet或的声明const,您可以全局声明该变量*(假设您未设置先前声明的变量)。这就是所谓的隐式全局 -臭名昭著的代码味道

*在大多数情况下,“全局”将引用window对象,但这并非总是如此。例如,Node.js有其自己的global名称空间对象,该对象引用当前模块。


如果是这样,不let x = 2应该翻译成1 x = 2错误吗?

编号let = 1不会覆盖let声明/关键字的本机功能。您仅创建了一个具有相同名称的全局变量。(也许不用说,但是不要这样做!


而且您没有具体询问,但是值得解决:

为什么允许我这样做let = 1但不允许这样做var = 1

var保留关键字

let将来的保留关键字,这意味着当前仅在严格模式下保留。请记住,如果您尝试编写经得起时间考验的代码,则最好不要将其let用作标识符。正如MDN在链接的文章中指出的那样,我想这将是一个保留字,迟早会出现。


Jon*_*lms 5

向后兼容。let相对较新,因此使用它作为变量名不破坏旧脚本不是保留关键字。这就是为什么您不能将其let用作变量名的原因var

我假设let = 1与var let = 1相同。

不会。它相当等于someothername = 1并创建一个隐式全局变量,这非常糟糕。