同じ変数名を2回宣言したエラーの原因と直し方
同じスコープ内で同じ名前の変数をlet・constで2回宣言したときに出るエラーです。コピー&ペーストで既存の変数名とかぶってしまうケースが典型です。
エラーメッセージの読み方
main.js:2
main.js- ファイル名
2- 行番号 — Node.jsが構文解析を諦めた位置
SyntaxError- エラークラス — 実行前の構文チェックで検出されました
Identifier 'name' has already been declared- 内容 — 期待していたもの、または受け付けられなかったもの
このエラーが出る典型パターン
パターン1
1 let name = "Al"; 2 let name = "Bo"; ^ 3 console.log(name);
main.js:2
let name = "Bo";
^
SyntaxError: Identifier 'name' has already been declared
同じスコープでletを2回使うと再宣言エラーになります。値を更新したいだけなら再宣言せず代入だけにします。
直し方: let を (空) にします。
広告
広告スロット(未設定)
パターン2
1 let score = 0; 2 let score = 100; ^ 3 console.log(score);
main.js:2
let score = 100;
^
SyntaxError: Identifier 'score' has already been declared
scoreも同様です。2回目のletは新しい変数の宣言とみなされ、同じ名前が既にあるためエラーになります。
直し方: let を (空) にします。
パターン3
1 let index = 0; 2 let index = 1; ^ 3 console.log(index);
main.js:2
let index = 1;
^
SyntaxError: Identifier 'index' has already been declared
値を更新したいだけなら代入だけで十分です。let・constでの再宣言はスコープが同じである限り許されません。
直し方: let を (空) にします。
よくある誤解
「同じ名前でも新しい値で上書きされるはず」という思い込みは、let・constでの再宣言には通用しません。値を更新したいだけなら再宣言せず、そのまま代入します。
まとめ
同じ変数名を2回宣言したエラーの原因と直し方は初級でつまずきやすい項目です。上の3パターンを実際に手で直すと、エラーメッセージのどこを読めばよいかが掴めます。