JavaScript
Uncaught SyntaxError: Identifier 'x' has already been declared
同じ変数名を2回宣言している
こんな症状
letやconstで同じ名前の変数を2回宣言するとこのエラーが出る。ブラウザのConsoleに同じコードを貼り直したときにも起きるよ。
まず試す
エラーに出た変数名でファイル内を検索し、2つ目の let/const 宣言を消すか別名にする。
js
// ❌ 同じ名前を2回宣言
let name = "太郎";
let name = "花子";
// ✅ 2回目は宣言せず代入、または別名に
let name = "太郎";
name = "花子";これで直らなければ、下の「自分のケース」を確認。
🔍 自分のケースはどれ?
- ✓長いファイルで同じ変数名が2回ある
→ 2つ目の let/const を消すか名前を変える。値を変えたいだけなら2回目は let を付けず代入だけにする。 - ✓DevToolsのConsoleで貼り直したら出た
→ Consoleは前回の宣言を覚えている。ページをリロードするか、コードを { } で囲って貼る。 - ✓同じJSファイルを2回読み込んでいる
→ HTMLに同じファイルの <script> タグが2つないか確認して1つにする。
なぜ起きる?
同じスコープ内でletやconstの同名変数を2回宣言しているよ。let/constは再宣言を禁止しているんだ。コードを書いていて起きる場合は、長いファイルでの名前の重複やコピペが原因。コードは正しいのにDevToolsのConsoleで起きる場合は、Consoleに let を含むコードを2回以上貼り付けたのが原因だよ(Consoleは前回の宣言を覚えている)。同じJSファイルを<script>タグで2回読み込んでいるときにも起きるよ。
✕ エラーが起きるコード
let name = "太郎";
// …200行くらい下で…
let name = "花子";
// Uncaught SyntaxError: Identifier 'name' has already been declared✓ 直したコード
// 再代入なら let を付けない
let name = "太郎";
name = "花子";
// 別の用途なら名前を変える
let userName = "太郎";
let teamName = "花子";✅ 直ったか確認
保存して再読み込み(Consoleなら貼り直し)。赤いエラーが消えればOK。
この解決法は役立ちましたか?
🔗 関連するエラー
- Uncaught ReferenceError: Cannot access 'x' before initialization — let/constの宣言前にアクセスしている
- Uncaught TypeError: Assignment to constant variable. — constで宣言した変数に再代入しようとした
- Uncaught SyntaxError: missing ) after argument list — 関数呼び出しの括弧が閉じていない
- Uncaught SyntaxError: Illegal return statement — 関数の外でreturnを使っている
- Uncaught TypeError: Cannot read properties of null (reading 'addEventListener') — 取得しようとしたHTML要素が見つかっていない
🔗 別カテゴリの関連エラー
📖 この問題を学べるレッスン
✏️ 手を動かして練習
📝 関連ブログ記事
- プログラミングのエラーメッセージの読み方 — エラーの読み方を基礎から解説
- JavaScriptとは?初心者向けにわかりやすく解説 — 変数・関数・イベントの基本
- JavaScriptでボタンクリックを動かす方法 — ボタンクリック時の動作を解説