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 方法添加元素,但是不能重新赋值。