首頁 > web前端 > js教程 > 為什麼 JavaScript 中 `let` 和 `const` 似乎沒有被提升?

為什麼 JavaScript 中 `let` 和 `const` 似乎沒有被提升?

DDD
發布: 2025-01-03 02:29:40
原創
331 人瀏覽過

Why Do `let` and `const` Seem Not to Be Hoisted in JavaScript?

使用 let 或 const 宣告的變數的提升

在 ES6 中,使用 let 或 const 宣告的變數與 var 相比似乎表現出不一致的提升行為。

提升的神話

首先,重要的是要澄清這一點JavaScript 中的所有聲明 都會被提升,包括那些使用let、const、var、function、 function* 和class 的宣告。這意味著所有這些聲明在它們定義的範圍內都是可見的。

與 let 和 const 的差異

關鍵差異不在於提升,而在於初始化 let 和 const變數。

  • var/function/function*: 當在作用域頂部建立綁定時,這些聲明將使用 undefined 或函數本身進行初始化。
  • let/const/class: 這些聲明保持未初始化直到聲明它們定義的地方就會被執行。

聲明和初始化之間的時間間隙造成了關於提升的誤解。

時間死區

對於 let 和 const變數的宣告和初始化之間的時間段稱為暫時死區。在此期間,存取變數會導致引用錯誤。

範例

x = y = "global";
(function() {
    console.log(x); // undefined
    console.log(y); // Reference error: y is not defined

    var x = "local";
    let y = "local";
}());
登入後複製

在此範例中,var 和 let 變數 x 和 y 在函數作用域的頂部聲明。然而,let 變數 y 直到稍後才初始化,從而創建了一個臨時死區,在該死區中存取 y 會引發錯誤。

結論

雖然 JavaScript 中的所有宣告都被提升,但 let 和 const 變數卻表現出不同的初始化行為。這種行為會導致「沒有被提升」的感覺,但實際上是由於後期初始化創建的暫時死區造成的。 let 和 const 變數在提升方面的運作方式相同。

以上是為什麼 JavaScript 中 `let` 和 `const` 似乎沒有被提升?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板