JavaScript
🚨 ReferenceError: Cannot access before initialization
let/constの宣言前にアクセスしている
😰 こんな症状
変数を使おうとすると「Cannot access before initialization」と表示される。変数の宣言順序で起きるよ。
🔍 原因
let/constで宣言した変数を、宣言より前の行で使おうとしているよ。これはTDZ(Temporal Dead Zone)と呼ばれる仕組みで、let/constは宣言行に到達するまでアクセスできないんだ。varと違いlet/constは巻き上げ(ホイスティング)されても初期化されないよ。
❌ エラーが起きるコード
console.log(x);
let x = 5;
// TDZ エラー ✅ 直し方
1. 変数の宣言(let/const)を、使用する行より前に書く。 2. 関数内で使う変数は関数の先頭で宣言する習慣をつける。 3. varは巻き上げされるがundefinedになるだけでエラーにならない(ただしvarは使わない方がよい)。
✅ 修正後のコード
let x = 5;
console.log(x);
// 宣言後に使う この解決法は役立ちましたか?
🔗 関連するエラー
- Cannot access before initialization — 変数の宣言前にアクセスした
- TypeError: Assignment to constant variable — constで宣言した変数に再代入している
- SyntaxError: Identifier 'x' has already been declared — 同じ変数名を2回宣言している
- Uncaught TypeError: Cannot read properties of null — getElementById の id が存在しない
- TypeError: Cannot read properties of null(null参照) — nullのプロパティにアクセスしている
🔗 別カテゴリの関連エラー
📖 この問題を学べるレッスン
📝 関連ブログ記事
- プログラミングのエラーメッセージの読み方 — エラーの読み方を基礎から解説
- JavaScriptとは?初心者向けにわかりやすく解説 — 変数・関数・イベントの基本
- JavaScriptでボタンクリックを動かす方法 — ボタンクリック時の動作を解説