ReferenceError: 赋值给未声明的变量 "x"

仅 JavaScript 严格模式 的异常 "Assignment to undeclared variable" 发生在将值分配给未声明的变量时。

消息

ReferenceError: x is not defined (V8-based)
ReferenceError: assignment to undeclared variable x (Firefox)
ReferenceError: Can't find variable: x (Safari)

错误类型

哪里出错了?

值已分配给未声明的变量。换句话说,在没有 var 关键字的情况下进行了赋值。声明的变量和未声明的变量之间存在一些差异,这可能会导致意外的结果,因此 JavaScript 在严格模式下会显示错误。

关于声明的变量和未声明的变量需要注意的三点

  • 声明的变量在其声明的执行上下文中受到限制。未声明的变量始终是全局的。
  • 声明的变量在任何代码执行之前都会创建。未声明的变量在执行分配给它们的代码之前不存在。
  • 声明的变量是其执行上下文(函数或全局)的不可配置属性。未声明的变量是可配置的(例如,可以删除)。

有关更多详细信息和示例,请参见 var 参考页面。

关于未声明变量赋值的错误仅在 严格模式代码 中出现。在非严格模式代码中,它们会静默忽略。

示例

无效情况

在这种情况下,变量 "bar" 是一个未声明的变量。

js
function foo() {
  "use strict";
  bar = true;
}
foo(); // ReferenceError: assignment to undeclared variable bar

有效情况

要将 "bar" 变成一个声明的变量,你可以在它前面添加 letconstvar 关键字。

js
function foo() {
  "use strict";
  const bar = true;
}
foo();

另请参阅