ReferenceError: assignment to undeclared variable "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)

错误类型

仅在严格模式下的ReferenceError

哪里出错了?

值已分配给未声明的变量。换句话说,在没有使用 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();

另见