《ES6标准入门》10~28Page let和const命令 变量的解构赋值

1.let和const命令

(1)let命令

let命令类似于ES3中的var命令,但是所声明的变量只在let所在的代码块内有效。

1 {
2     let a = 10;
3     var b = 1;    
4 }
5 
6 console.log(a); //报错
7 console.log(b); //1

let相较var来讲有三个特殊性质,分别是不存在变量提升、暂时性死区和不允许重复声明。

 1 //不存在变量提升
 2 console.log(a); //报错
 3 let a = 1;
 4  
 5 //你无法在let声明变量之前使用它
 6 
 7 //暂时性死区(TDZ)
 8 if( true ){
 9     //TDZ开始
10     tmp = 'abc'; //ReferenceError
11     console.log(tmp); //ReferenceError
12 
13     let tmp; //TDZ结束
14     console.log(tmp); //undifened
15 }
16 //如果区块中存在let和const命令,则这个区块对这些命令的声明变量从一开始就形成封闭作用域。只要在声明之前使用这些变量就会报错。
17 
18 //不允许重复声明
19 {
20     let a;
21     var a; //报错
22 }
23 
24 {
25     let a;
26     let a; //报错
27 }
28 
29 var a;
30 {
31     let a; //不报错
32 }

(2)const

const命令用来声明常量,一旦被改变则会报错。

1 const pi = 3.14;
2 pi = 3.1415; //报错

let、const声明的变量和常量不是全局对象的属性。

 

2.变量的解构赋值

ES6允许按照一定模式,从数组和对象中提取值,对变量进行赋值,这被称为解构。

(1)数组解构赋值

let [a, b, c] = [1, 2, 3];
console.log(a); //1 

具备Iterator接口的对象,可以进行数组解构赋值。

(2)对象的解构赋值

var { foo, bar } = { foo: "aaa", bar: "bbb" };

如果等号右边是字符串,字符串会被转换成类似数组的对象。

如果等号右边是数值或者布尔值,则会先转换成对象。

 

posted on 2017-04-29 17:51  Zainking  阅读(257)  评论(0编辑  收藏  举报

导航