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”成为已声明变量,可以在其前面添加 let、const 或 var 关键字。
js
function foo() {
"use strict";
const bar = true;
}
foo();