← エラー辞典に戻る

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。

🆘 まだ直らないときは

import で同名のものを二重に読み込んでいないか、別ファイルの同名グローバル変数とぶつかっていないかも確認しよう。

Q&Aで質問する →

この解決法は役立ちましたか?

🔗 関連するエラー

🔗 別カテゴリの関連エラー

📖 この問題を学べるレッスン

JSレッスン2:変数とデータ型で根本から理解する →

✏️ 手を動かして練習

このテーマの図解ドリルで実際に書いて確認する →

📝 関連ブログ記事

📖 関連する用語

🚀 JSレッスン2:変数とデータ型で根本解決しよう!

このエラーの背景にある仕組みを、手を動かしながら学べるレッスンがあります。完全無料・登録不要。

JSレッスン2:変数とデータ型へ →

❓ 関連するQ&A