为什么我可以多次声明var?我会期望一个错误。
此代码引发错误:
let a = true;
let a = false;
未捕获的SyntaxError:标识符'a'已被声明
为什么这也不会引发错误?
var b = true;
var b = false;
预期:语法错误:标识符'b'已经声明
答案 0 :(得分:4)
这是因为var
上有可变的提升,而let
(或const
上没有)。
因此,这意味着您每次使用var
时,实际上都会取消之前的操作,因为对于JavaScript解释器,您的第一个代码如下:
var b;
b = true;
b = false;
但这不适用于let
或const
,因为let
和const
是块作用域的,而var
是函数作用域的。
答案 1 :(得分:1)
var
被吊起;重复的变量名将被忽略。对于解释器,您的第二个片段如下:
var b;
b = true;
b = false;
与之相反,let
不是 悬挂的,因此禁止重复声明。