为什么我可以多次声明JavaScript变量?

5

为什么我能够多次声明一个变量?我本以为会报错。

以下代码会引发错误:

let atrue;
let afalse;

未捕获的SyntaxError: 标识符'a'已经被声明

为什么这个不会引发错误呢?

var b = true;
var b = false;

预期结果:未捕获的语法错误:标识符'b'已经声明。

2个回答

5

这是因为使用var会发生变量提升,但是使用let(或const)则不会。

这意味着每次你使用var时,它实际上会取消之前的操作,因为对于JavaScript解释器来说,你的第一段代码看起来像:

var b;
b = true;
b = false;

但是这种方法不适用于使用 letconst 声明的变量,因为 letconst 是块级作用域,而 var 是函数级作用域。


2

var会被提升;重复的变量名将被忽略。对于解释器来说,你的第二段代码看起来像这样:

(注:Original Answer翻译成“最初的回答”)

var b;
b = true;
b = false;

相比之下,let 不会被提升,因此禁止重复声明。"

3
"let is not hoisted" 并不正确。在 JavaScript 中,所有声明(varletconstfunctionfunction*class)都会被提升。参考资料:https://dev59.com/vV0Z5IYBdhLWcg3wphoE#31222689 - adiga

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接