JavaScript中的变量声明:let
2020-11-13大约6分钟
ES6引入了let
关键字来声明所有类型的数据(如布尔值,对象,整数等)的变量。
在上一篇文章《JavaScript中的变量声明:var》中,我们讨论了JavaScript中用var
关键字的作用域及提升。
let
:
- 在Javascript中,
let
关键字声明了一个块作用域变量。 - 不能再次声明相同的变量,但可以再次对其进行赋值。
- 用
let
声明的变量不会被提升(hoisted)。
- 语法
下面的例子中,我们用let
来声明两个变量x
和y
:
let x = 5;
console.log(x); // 5
let y;
y = false;
console.log(y); // false
2. 块作用域
用let
声明的变量会创建块作用域。
示例1:
let range = 10;
if (range > 10) {
let food = "Pizza";
console.log(food); //Pizza
}
console.log(food); // ReferenceError: food is not defined
这里let
创建了一个块作用域,food
只能在if语句块中访问,出了if
语句就不能再访问。
示例2:
for(let i = 0; i < 5; i++) {
// do something
}
console.log(i); // ReferenceError: i is not defined
因为i的作用域只有在for
循环里面,因此在for
语句之外无法访问变量i
。
3. 重新声明和初始化
使用let
我们无法重新声明变量,否则JavaScript引发语法错误。一个变量只能声明一次,但是变量可以用任何值重新初始化。
不能重新声明
let a = true;
let a = false;
console.log(a);
// SyntaxError: Identifier 'a' has already been declared
重新赋值
let a = true;
a = false;
console.log(a); // false
注意:如果我们仅使用let
声明变量而未赋值,则其默认值是undefined
,而不是null
。稍后,当代码执行到变量赋值时,新值将替换undefined
值。
let a;
console.log(a); // undefined
a = 10;
console.log(a); // 10
4. 不会被提升
let
声明不会被提升,因此,如果我们尝试在声明变量之前访问变量,则Javascript会引发错误。
str = "hello";
let str;
// ReferenceError: Cannot access 'str' before initialization