JavaScript: 「var」と「let」どっちを使う?

JavaScriptでの変数宣言にはvar文とlet文の2つの方法があります。
var文は最初からJavaScriptに組み込まれていましたが、 let文はES2015から使用できるようになった新しい機能です。

「varとlet、どっちを使えばいいのか」と聞かれた場合は、 「let」を使う事をおすすめします。

letの方がお勧めな理由①:同名の変数宣言時にエラーがでる

同じスコープ(有効範囲)内で同じ名前の変数を宣言した場合、 varはエラーが出ずにそのまま実行されますが、 letの場合はエラーが発生します。

こうしたケースでは、 たいてい間違って(気付かずに)同じ変数名を使ってしまう場合がほとんどなので、 エラーを出してくれた方が助かります。

letの方がお勧めな理由②: ブロックスコープが適用される

var文は関数という単位でスコープ(有効範囲)が決まります。 一方、let文はブロックスコープが適用されます。

ブロックスコープとは「宣言したブロック{}の中でのみ有効」という 考え方です。

次のサンプルコードでは、ifブロックの中でletを使って変数aを宣言しています。 ifブロック外の「console.log(a)」の結果はどうなるのでしょうか?

if (true) {
	let a = 1;
}

console.log(a);

「console.log(a)」の結果は 「Uncaught ReferenceError: a is not defined」となって、 エラーが発生します。 上記の場合、変数aは「宣言したifブロックの中でのみ有効」というのが ブロックスコープの考え方です。

「スコープはなるべく限定した方が良い」という考え方からすると、 varよりもブロックスコープが適用されるletを使う方がおすすめです。

JavaScript入門