- ES2015(ES6) 新增加了两个重要的 JavaScript 关键字: let 和 const。
- let 声明的变量只在 let 命令所在的代码块内有效。
- const 声明一个只读的常量,一旦声明,常量的值就不能改变。
let 是在代码块内有效,var 是在全局范围内有效:
let 只能声明一次 var 可以声明多次:
let a = 1;
let a = 2;
var b = 3;
var b = 4;
a // Identifier 'a' has already been declared
b // 4
for 循环计数器很适合用 let
- 变量 i 是用 var 声明的,在全局范围内有效,所以全局中只有一个变量 i
- 变量 j 是用 let 声明的,当前的 j 只在本轮循环中有效,每次循环的 j 其实都是一个新的变量
for (var i = 0; i < 10; i++) {
setTimeout(function(){
console.log(i);
})
}
// 输出十个 10
for (let j = 0; j < 10; j++) {
setTimeout(function(){
console.log(j);
})
}
// 输出 0123456789
不存在变量提升
console.log(a); //ReferenceError: a is not defined
let a = "apple";
console.log(b); //undefined
var b = "banana";
const 声明一个只读变量,声明之后不允许改变。意味着,一旦声明必须初始化,否则会报错。
- const 其实保证的不是变量的值不变,而是保证变量指向的内存地址所保存的数据不允许改动。
- 复杂类型变量指向的内存地址其实是保存了一个指向实际数据的指针
const定义常量与使用let 定义的变量相似:
- 二者都是块级作用域
- 都不能和它所在作用域内的其他变量或函数拥有相同的名称
还有以下两点区别:
- const声明的常量必须初始化,而let声明的变量不用
- const 定义常量的值不能通过再赋值修改,但是可以修改添加,也不能再次声明。而 let 定义的变量值可以修改。