JavaScript: letは再定義するとエラーになる

JavaScriptの変数宣言には「var」と「let」があります。 let はES2015から使えるようになった機能で、 var よりも使いやすくなっています。

let には「同一ブロック内で再定義(再宣言)するとエラーになる」 という特徴があります。
言い換えると、「同じブロック内で同名の変数を宣言するとエラーになる」 ということです。

例えば、次のサンプルコードのように変数「a」をletで再定義すると エラーが発生します。

let a = 1;
let a = 2;
実行結果
Uncaught SyntaxError: redeclaration of let a

「redeclaration: 再宣言してますよ」というエラーがでます。

var で再定義(再宣言)してもエラーは発生しません。
次のコードは正常に実行されます。

var a = 1;
var a = 2;

console.log(a); // 2

再定義(再宣言)はエラーになった方が良い

再定義(再宣言)してしまうのは、 すでに使っている変数名に気付かずに(間違って) 同じ名前を付けてしまうケースがほとんどです。

ですからエラーを出してくれた方が、 開発する側にとっては助かります。 その意味ではvarを使うよりもletを使った方が安全性が高くなります。

違うブロックではエラーにならない

letの再定義(再宣言)がエラーになるのは、 あくまで同じブロック内の話です。 違うブロックで同じ名前の変数を使ってもエラーにはなりません。

次のサンプルコードでは、トップレベルで宣言した変数「a」と、 ifブロック内で宣言した変数「a」は別の変数として扱われますから 正常に実行できます。

let a = 1;

if (true){
	let a = 2;
	console.log(a); // 2 
}

console.log(a); // 1
JavaScript入門