簡體   English   中英

有關var聲明的JavaScript行為說明

[英]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) ,價值isTrueundefined 它已聲明,但尚未初始化,因此其值是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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM