ReferenceError: "x" 未定义

JavaScript 异常“变量未定义”发生在某个地方引用了不存在的变量时。

消息

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

错误类型

发生了什么错误?

某个地方引用了不存在的变量。需要声明此变量,或者确保它在当前脚本或作用域中可用。

注意:加载库(如 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

另请参阅