constとlet

constおよびletはES5のvarを置き換えるものです。 constは定数を宣言するもので、letが変数を宣言するものです。 役割としてはletvarと同様のものですが、同一ではないため別の名前になっています。

再代入の可否

constletの差異は再代入の可否です。constは再代入が禁止されます。

const x = 1;
x = 2; // error
let y = 3;
y = 4; // ok

constでオブジェクトや配列を定義した場合にその要素を書き換えることは再代入にはなりません。

const o = {};
o.a = 1; // ok
const a = [];
a[0] = 2; // ok

ブロックスコープ

varは関数スコープという多少分かりにくいスコープの概念でしたが、 constletはブロックスコープになりより直感的に使えます。

function f() {
  var x = 1;
  if (true) {
    var x = 2; // same as x = 2;
  }
  console.log(x); // display "2"
}

function g() {
  let x = 1;
  if (true) {
    let x = 2; // different from outer x
  }
  console.log(x); // display "1"
}

一方で、同一変数名をネストしたブロックスコープで使って変数を隠してしまうことは、 バグの元にもなるので一般的には勧められるものではありません。

参照: http://eslint.org/docs/rules/no-shadow

varにしかできないこと

  • 関数スコープの変数の宣言
  • (ファイルを横断する)グローバル変数の宣言

おすすめ

  • varは一切使わない
  • 再代入を行わないケースでは必ずconstを使う

課題

  1. 再代入の可否について試す

参考情報

results matching ""

    No results matching ""