簡體   English   中英

Javascript變量的初始化和聲明順序

[英]Javascript variable initialization and declaration order

使用打字稿,我發現當我使用數組解構時,它會生成一些異常的代碼,其中變量初始化先於其聲明,即在以下示例控制台中顯示“未定義”

(function () {
    var _a = 1;
    _c = _a;
    var _c;
})();
console.log(_c);

> ReferenceError: _c is not defined

為什么變量_c不成為全局變量?

在Javascript中,在實際運行任何代碼之前,將所有變量聲明提升到聲明它們的作用域的頂部。 所以你的代碼示例:

(function () {
    var _a = 1;
    _c = _a;
    var _c;
})();
console.log(_c);

評估如下:

(function () {
    var _a;
    var _c;
    _a = 1;
    _c = _a;
})();
console.log(_c);

因此, _c在實際被引用或使用之前在本地聲明,因此它不是隱式全局的,因為它在引用它的范圍內聲明並且提升確保在該范圍的開頭聲明它。 var _c; 聲明在范圍內。


以下是有關起重概念的一些參考資料:

JavaScript范圍界定和提升

MDN- var語句

揭秘JavaScript變量作用域和提升

JavaScript吊裝說明

函數下的所有變量均為局部變量。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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