[英]JavaScript behavior explanation regarding a var declaration
我有以下代碼:
"use strict";
function isDefined(variable)
{
return (typeof (window[variable]) === "undefined") ? false : true;
}
try
{
isDefined(isTrue);
}
catch (ex)
{
var isTrue = false;
}
isTrue = true;
有人可以向我解釋為什么我刪除關鍵字“ var”時會引發異常,但是當異常出現時卻將其視為未定義?
在嚴格模式下運行時,不允許訪問以前未聲明的變量。 因此,必須先聲明isTrue
才能訪問它。 因此,如果您刪除了它前面的var
,並且未在其他任何地方聲明它,那將是一個錯誤。
在MDN頁面上以嚴格模式引用:
首先,嚴格模式使得不可能意外創建全局變量。 在普通的JavaScript中,迷惑分配中的變量會在全局對象上創建一個新屬性,並繼續“起作用”(盡管將來可能會失敗:在現代JavaScript中可能)。 會意外創建全局變量的賦值會改為以嚴格模式拋出:
您的關於undefined
的問題部分要復雜一些。 由於變量提升,編譯器將變量聲明提升到聲明的作用域的頂部,因此帶有var
語句的代碼與此等效:
var isTrue;
try
{
isDefined(isTrue);
}
catch (ex)
{
isTrue = false;
}
isTrue = true;
因此,當你調用isDefined(isTrue)
,價值isTrue
是undefined
。 它已聲明,但尚未初始化,因此其值是undefined
。 當您沒有var
語句時,在嚴格模式下對isTrue
任何引用都是錯誤的,因為尚未聲明它。
如果您只想知道變量是否還具有值,則可以執行以下操作:
if (typeof isTrue != "undefined") {
// whatever code here when it is defined
}
或者,如果您只是想確保它具有尚未初始化的值,則可以執行以下操作:
if (typeof isTrue == "undefined") {
var isTrue = false;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.