ES6 新增了两个重要的关键字:const 和 let,加上之前的 var 有了三个变量的声明方式,整理并记录一下。
¶一、const
const 声明一个只读的变量,而且必须初始化。声明后,变量的值就不可以修改。
1 | const a = 2; // 正确 |
¶二、var
var 无块级作用域,容易造成全局变量污染。定义的变量可以修改,如果不初始化会输出undefined
,不会报错。
1 | var a = 2; // 正确 |
¶三、let
let 有块级作用域,可以理解为带有块级作用域的 var。函数内部使用 let 定义变量后,对函数外部无影响。
1 | let a = 2; |
¶四、const、var、let 的比较
¶1、const 和 let 的相同点
- 二者都是块级作用域
- 都不能和所在作用域内的其他变量或函数拥有相同的名称
¶2、const 和 let 的不同点
- const 声明的变量必须初始化,而 let 声明的变量不用
- const 声明的变量不能通过再次修改,也不能再次声明。而 let 声明的变量可以修改。
¶3、var 声明的变量会挂载到 window 上,const 和 let 声明的变量不会
¶五、const 的本质
const 声明的变量不可再次修改,但并非是常量,它声明了一个常量引用一个值。使用 const 声明的对象或数组,其实是可变的。下面的代码并不会报错:
1 | const car = { type: 'Fiat', model: '500', color: 'white' }; // 创建常量对象 |
但是我们不能对常量对象重新赋值
:
1 | const car = { type: 'Fiat', model: '500', color: 'white' }; |
const 声明的数组同理,能以下标去修改数组,也能通过 push 方法添加元素,但是不能重新赋值
。