ES6 - let/const

ES6では変数を定義する際のキーワードとして、letconstが使えます。

let

varで宣言した変数は関数スコープを持つようになるので、変数が定義された関数内で参照できます。

var guess = 2;  
console.log(guess);      // -> 2

(() => {
    var guess = 5;
  console.log(guess); // -> 5
})();

console.log(guess);   // -> 2  

これに対してletで定義した変数は「ブロックスコープ」を持ち、ブロックの中だけで参照できます。

for(var i = 0; i < 10; i++) {  
    console.log(i);
}

console.log(i === 10);    // true

for(let j = 0; j < 10; j++) {  
    console.log(j);
}

console.log(j);    // Uncaught ReferenceError: j is not defined  

const

constは定数を定義するために使います。これもブロックスコープを持ちます。

const PI = 3.14;  
PI = 3; // -> NG

const PI; // -> NG  

constの場合、それが「イミュータブルな値」という意味ではないことに注意する必要があります。単純に再代入ができない識別子ということになります。

どれをどこで使うか

基本的には以下の順番で用途を考えて使えば良さそうです。

  1. 定数や、後で変更する必要が無い識別子を定義する場合にはconst
  2. 変数、再代入したい識別子を定義する場合にはlet
  3. ES5で書いてある、以前のコードではvar

実際のところ、変数に再代入する機会は減っているように思います。例えばループでの処理もmapreduceが普通に使えるようになりましたし、テンプレートリテラルもサポートされました。const -> letの順番で考えて使ってみることにします。