ES6引入了两个新的关键字:let和const,它们用于声明变量。与传统的var关键字相比,let和const有一些重要的区别。
let
let关键字用于声明块级作用域的变量,其作用域仅限于当前代码块内。与var不同,let声明的变量不存在变量提升,必须先声明后使用。例如:
{
let x = 1;
console.log(x); // 输出 1
}
console.log(x); // 报错,x未定义
在for循环中使用let声明的变量,可以避免传统的for循环中因为变量提升导致的问题。例如:
for (let i = 0; i < 5; i++) {
setTimeout(function() {
console.log(i);
}, 1000);
}
上述代码中,使用let声明i,每次循环都会新建一个i的副本,因此setTimeout中输出的i值分别为0、1、2、3、4。
const
const关键字用于声明常量,其值一旦被赋值就不能被修改。与let一样,const也是块级作用域的。例如:
const PI = 3.14;
PI = 3; // 报错,常量不可修改
const声明的常量必须在定义时初始化。例如:
const PI; // 报错,常量必须初始化
对于复杂类型的常量(例如对象、数组等),const只保证变量指向的地址不变,但是对象本身的属性值是可以修改的。例如:
const obj = { a: 1 };
obj.a = 2; // 正确,可以修改对象的属性值
obj = { a: 2 }; // 报错,常量指向的地址不可变
总结
let和const是ES6中新引入的声明变量的关键字,它们与传统的var有一些重要的区别。let声明的变量是块级作用域的,不存在变量提升;const声明的常量一旦被赋值就不能被修改,但是对于复杂类型的常量,其属性值是可以修改的。