Javascript/ES6 let和const用法

  let关键词是创建绑定到任何代码块(称为块作用域block scoping)的声明,相比使用var,它提供了函数的作用域,因此在JS6中推荐使用let,let声明的变量可以再分配:

var a = 2; 
{
    let a = 3;
    console.log(a); // 3
}
console.log(a); // 2

 

我们看看let在循环中的应用

for (let i in usernames) {
  _fetchProfiles('/users/' + usernames[i], function () {
  console.log("fetched ", usernames[i]);
});
}

let 没有变量提升(hoisted),上述代码中循环每次迭代时i变量的值都是新创建的,每次回调callback都是接受它自己的i版本。

 

另外一个代码块作用域的声明是const,const声明的只读常量不可以再分配,它定义了一个常量,这个常量指向一个值,换句话说,这个值不是不可变的,只是分配给了它:

{
    const ARR = [5,6];
    ARR.push(7);
    console.log(ARR); // [5,6,7] 
    ARR = 10; // TypeError 
}

 

一些事情需要记住:

  • 当使用let关键词时,不会发生变量提升(Hoisting)
  • let和const的作用域是最靠近的代码块

 

Javascript6简明手册