我的ES6学习之路(一)

强烈推荐  阮一峰写的《ECMAScript6入门》

let和const命令

let命令:

  let用于声明变量,用法和var相似,但是不完全相同,有以下几点区别

  ① let命令只在当前作用域中有效;

  ② let不会发生‘变量提升’的现象,变量一定要声明后在使用他,否则会报错。

    问题:ES6支持ES5 但是如果发生以下情况也会报错

1 var demo = 13;
2 if(true){
3   demo = "abc";    //这里也会报错
4   let demo;    
5 }

    原因:只要在块级作用域内存在 let ,const 命令就会形成一个‘暂时性死区’ ,即使全局中声明了该变量也会报错

    连带结果:typeof 不是很管用啦!

if(true){
  typeof x;     //报错
  let x;
  typeof y;      //undefined  
}

  ③ let 不允许在相同作用域内重复声明

  ④ 块级作用域:

    ES5:只存在全局作用域和函数作用域

    ES6: 添加了块级作用域,而且还允许其嵌套使用,也可以直接使用  {块级作用域执行内容... //和立即执行函数功能一样 } 还允许在块级作用域内声明函数是不是方便的

  ⑤ 虽然let声明的变量不会被提升,但是函数的声明还是会被提升的!

const命令:

  ①添加的常量的声明命令-------声明后为只读属性不允许改变

  ②其他特点和let一样,不会提升,会形成暂时性死区,

变量的‘解构赋值’

  解构赋值:ES6允许按照一定的模式,从数组和对象中提取值,然后对变量进行赋值。

 let [a,b,c] = [1,2,3] // 如果是ES5的话只能一个个的声明变量并赋值啦! 

  解构赋值的本质应该就是一种匹配模式,只要等号两边的模式相同就可以进行赋值啦!如果匹配不到 就会返回undefined给变量

let [a, b, ...c] = ["a"]

a   // "a"
b   // undefined
c   // []   返回空数组是  ‘...’  的功劳哦

  还有“不完全解构”    也就是值多于变量

let [a, [b], c] = [1,[2 , 3], 4]
a  // 1
b  //2     [2,3]没有完全解构
c  //4

 

posted @ 2016-11-09 15:22  雨中伞  阅读(227)  评论(0编辑  收藏  举报