为什么我能够多次声明一个变量?我本以为会报错。
以下代码会引发错误:
let a = true;
let a = false;
未捕获的SyntaxError: 标识符'a'已经被声明
为什么这个不会引发错误呢?
var b = true;
var b = false;
预期结果:未捕获的语法错误:标识符'b'已经声明。
为什么我能够多次声明一个变量?我本以为会报错。
以下代码会引发错误:
let a = true;
let a = false;
未捕获的SyntaxError: 标识符'a'已经被声明
为什么这个不会引发错误呢?
var b = true;
var b = false;
这是因为使用var
会发生变量提升,但是使用let
(或const
)则不会。
这意味着每次你使用var
时,它实际上会取消之前的操作,因为对于JavaScript解释器来说,你的第一段代码看起来像:
var b;
b = true;
b = false;
但是这种方法不适用于使用 let
或 const
声明的变量,因为 let
和 const
是块级作用域,而 var
是函数级作用域。
var
会被提升;重复的变量名将被忽略。对于解释器来说,你的第二段代码看起来像这样:
(注:Original Answer翻译成“最初的回答”)
var b;
b = true;
b = false;
let
不会被提升,因此禁止重复声明。"var
、let
、const
、function
、function*
、class
)都会被提升。参考资料:https://dev59.com/vV0Z5IYBdhLWcg3wphoE#31222689 - adiga