Code Fix

初級

同じ変数名を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パターンを実際に手で直すと、エラーメッセージのどこを読めばよいかが掴めます。

演習をはじめる

関連するエラー

広告
広告スロット(未設定)