Code Fix

初級

ReferenceError: x is not defined の原因と直し方

存在しない変数・関数名を参照したときに出るエラーです。タイプミスだけでなく、let/constのブロックスコープの外から参照した場合にも同じエラーになります。

エラーメッセージの読み方

main.js:2
main.js
ファイル名
2
行番号 — 実際にクラッシュした行
ReferenceError
例外クラス — 何が起きたか。ここを検索するのが最短です
totall is not defined
内容 — 期待していたもの、または受け付けられなかったもの

このエラーが出る典型パターン

パターン1

 1  let total = 100;
 2  console.log(totall);
                   ^
main.js:2 console.log(totall); ^ ReferenceError: totall is not defined

変数名のスペルミスです。JavaScriptは大文字小文字を区別するため、Totalとtotalも別の名前として扱われます。

直し方: totalltotal にします。

この問題を解いてみる →

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

パターン2

 1  function square(n) {
 2    return n * n;
 3  }
 4  console.log(squre (4));
                   ^
main.js:4 console.log(squre(4)); ^ ReferenceError: squre is not defined

関数名のスペルミスです。定義したsquareと1文字でも違うと、別の名前として扱われ見つけられません。

直し方: squresquare にします。

この問題を解いてみる →

パターン3

 1  if (true) {
 2    let   total = 42;
        ^
 3  }
 4  console.log(total);
main.js:4 console.log(total); ^ ReferenceError: total is not defined

letは波括弧で囲まれたブロックの中だけで通用します。ブロックの外から参照するとReferenceErrorになります。varで宣言すればブロックスコープを持たず、ファイル全体から参照できます。

直し方: letvar にします。

この問題を解いてみる →

よくある誤解

varで宣言した変数はブロックの外からでも参照できますが、letやconstは波括弧の中でしか通用しません。以前書いたvarの感覚のままブロックの外に出ると、その瞬間にエラーになります。

まとめ

ReferenceError: x is not definedは初級でつまずきやすい項目です。上の3パターンを実際に手で直すと、エラーメッセージのどこを読めばよいかが掴めます。

演習をはじめる

関連するエラー

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