ReferenceError: "x" is not defined

當引用了一個不存在的變數時,JavaScript 就會丟擲“變數未定義”異常。

訊息

ReferenceError: "x" is not defined (V8-based & Firefox)
ReferenceError: Can't find variable: x (Safari)

錯誤型別

ReferenceError.

哪裡出錯了?

某個地方引用了一個不存在的變數。這個變數需要被宣告,或者你需要確保它在你當前的指令碼或作用域中可用。

注意:載入庫(例如 jQuery)時,請確保在訪問庫變數(例如“$”)之前載入它。將載入庫的<script>元素放在使用它的程式碼之前。

示例

變數未宣告

js
foo.substring(1); // ReferenceError: foo is not defined

變數“foo”未在任何地方定義。它需要是某個字串,以便String.prototype.substring()方法能夠正常工作。

js
const foo = "bar";
foo.substring(1); // "ar"

錯誤的作用域

變數需要在當前的執行上下文中可用。在函式內部定義的變數不能從函式外部的任何地方訪問,因為該變數只在函式的作用域內定義。

js
function numbers() {
  const num1 = 2;
  const num2 = 3;
  return num1 + num2;
}

console.log(num1); // ReferenceError num1 is not defined.

然而,函式可以訪問在其定義作用域內定義的所有變數和函式。換句話說,在全域性作用域中定義的函式可以訪問在全域性作用域中定義的所有變數。

js
const num1 = 2;
const num2 = 3;

function numbers() {
  return num1 + num2;
}

console.log(numbers()); // 5

另見