明天有工夫又看了一下es6的语法,略微做了一点总结,便于日后查阅:
let / const 申明变量,一下所讲的所有的特点都是相较于var来说的

var:

1:变量晋升: var/function 申明的变量会被晋升到它的调用之前    console.log(aa); //undefined    var aa;    ==等价于==    var aa;    console.log(aa); //undefined    aa = 12;    console.log(aa); //12    2: 全局作用域 / 函数作用域    函数外部能够拜访全局作用域的变量,大那是全局作用域只能够拜访全局变量,

let 特点:

1 . 不存在变量的晋升    console.log(bb); //报错    let bb;2 . 暂时性死区    在一个块级作用域内申明的变量就会绑定在这个区域内了,在let没有申明变量之前这个变量都是不可用的    1) : console.log(aa); // 报错         let aa;            2) : function fn(aa){             let aa;         }         fn();// 报错,aa曾经申明过了,这也阐明了函数的参数实是在这个函数外部申明一个变量        3) : function bar(x = y, y = 2) {          return [x, y];        }        bar(); // 报错 在赋值x = y 的时候,y 还没有被申明.        //function bar(x = 2, y = x) {        //  return [x, y];        //} 这样是可行的         3 . 不容许反复申明;在同一个块作用域( "{  }" )内不能够反复申明同一个变量     1) : let aa = 1;          let aa;          console.log(aa); //报错, aa曾经申明     2) : function fn(bb){            let bb;          }          fn();//报错 ,bb 曾经申明           4 . 块级作用域     会计作用域外部能够拜访蕴含它的组用域内的变量,然而却不能拜访蕴含于它的块级作用域的变量    let tmp = "hello";      //console.log(aa); //找不到aa      //console.log(bb); //找不到bb      function f() {        console.log(tmp); //hello        //console.log(bb); //找不到bb        let aa = 123;        if (true) {          let bb = 567;          console.log(tmp); //hello          console.log(aa); //123        }      }      f();

const 特点:
根本以let是统一的,只有一点const申明的变量是只读的,一但申明就必须初始化(赋值),边切前面也不能够在从新赋值