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

时间:2019-02-19 07:33:52

标签: javascript function ecmascript-6 var

为什么我可以多次声明var?我会期望一个错误。

此代码引发错误:

let a = true;
let a = false;

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

为什么这也不会引发错误?

var b = true;
var b = false;

预期:语法错误:标识符'b'已经声明

2 个答案:

答案 0 :(得分:4)

这是因为var上有可变的提升,而let(或const上没有)。

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

var b;
b = true;
b = false;

但这不适用于letconst,因为letconst是块作用域的,而var是函数作用域的。

答案 1 :(得分:1)

var被吊起;重复的变量名将被忽略。对于解释器,您的第二个片段如下:

var b;
b = true;
b = false;

与之相反,let不是 悬挂的,因此禁止重复声明。