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