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();

另見