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