### const命令
* * * * *
> const声明一个只读的常量。一旦声明,常量的值就不能改变。试图改变常量时javascript运行环境会报错,如:
~~~
const PI = 3.1415;
console.log(PI) // 3.1415
PI = 3;
// TypeError: Assignment to constant variable.
~~~
> const声明的变量不得改变值,这意味着,const一旦声明变量,就必须立即初始化,不能留到以后赋值。
>const的作用域与let命令相同:只在声明所在的块级作用域内有效
>const命令声明的常量也不存在变量提升,也与let一样不可重复声明。
>对于复合类型的变量,变量名不指向数据,而是指向数据所在的地址。const命令只是保证变量名指向的地址不变,并不保证该地址的数据不变,所以将一个对象声明为常量必须非常小心。
~~~
const foo = {};
foo.prop = 123;
foo.prop
// 123
foo = {}; // TypeError: "foo" is read-only
~~~
> 上面代码中,常量foo储存的是一个地址,这个地址指向一个对象。不可变的只是这个地址,即不能把foo指向另一个地址,但对象本身是可变的,所以依然可以为其添加新属性。
ES5只有两种声明变量的方法:var命令和function命令。ES6除了添加let和const命令,后面章节还会提到,另外两种声明变量的方法:import命令和class命令。所以,ES6一共有6种声明变量的方法。