为什么我能多次声明var?我希望有一个错误。
此代码引发错误:
let a = true;
let a = false;
未捕获的SyntaxError:已声明标识符'a'
为什么这也不会引发错误?
var b = true;
var b = false;
预期:Uncaught SyntaxError:标识符'b'已经声明
这是因为有var
的变量提升,但不是let
(或const
)。
这意味着每次使用var
时,它基本上都会取消之前的操作,因为对于JavaScript解释器,您的第一个代码如下所示:
var b;
b = true;
b = false;
但这不适用于let
或const
,因为let
和const
是块范围的,而var
是功能范围的。
var
被悬挂;重复的变量名称将被忽略。对于翻译,您的第二个代码段如下:
var b;
b = true;
b = false;
相比之下,let
没有悬挂,因此禁止重复声明。