为什么我可以多次声明一个 javascript var?

use*_*336 5 javascript var function ecmascript-6

为什么我可以多次声明 var?我预计会出现错误。

\n\n

此代码会引发错误:

\n\n
let a =\xc2\xa0true;\nlet a =\xc2\xa0false;\n
Run Code Online (Sandbox Code Playgroud)\n\n

未捕获的语法错误:标识符“a”已被声明

\n\n

为什么这不会引发错误?

\n\n
var b =\xc2\xa0true;\nvar b =\xc2\xa0false;\n
Run Code Online (Sandbox Code Playgroud)\n\n

预期:未捕获语法错误:标识符“b”已被声明

\n

Jac*_*ord 5

这是因为有变量提升 with var,但没有 with let(或const就此而言)。

因此,这意味着每次使用 时var,它基本上都会取消之前的操作,因为对于 JavaScript 解释器来说,您的第一个代码如下所示:

var b;
b = true;
b = false;
Run Code Online (Sandbox Code Playgroud)

但这不适用于letor ,const因为letandconst是块作用域,而var是函数作用域。