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

另见