理解ES6 區塊級函數的語意
簡介
隨著ES6 的出現,區塊級函數聲明成為該語言的一個有價值的補充。儘管有最初的假設,這些函數的精確語義涵蓋了更廣泛的範圍,包括嚴格模式和非嚴格模式之間的區別以及瀏覽器相容性考慮因素。
語意
下表總結了區塊級函數語意的關鍵面向:
執行環境 | ]外部可見塊 | 提升至塊頂部 | TDZ |
---|---|---|---|
非嚴格,無網絡擴展 | 是的,就像var | 是 | 無 |
嚴格,無網路擴充 | 否 | 是 | 無 |
非嚴格,網絡擴展 | 是,如var | 是 | 無 |
嚴格,網路擴充 | 否 | 是的,兩次(函數和區塊) | 函數範圍的綁定之前未定義聲明 |
嚴格模式含義
本文中「嚴格模式」的概念是指[[Strict]] 內部插槽函數對象,而非函數本身的嚴格性。因此,涉及非嚴格周圍程式碼中帶有“use strict”的函數聲明的程式碼片段仍被視為“非嚴格”。
Web 擴充
「web擴充」僅適用於具有「正常」函數語句外觀的非嚴格(草率)程式碼。在具有 Web 相容性語意的草率模式下,區塊內的函數宣告會如下處理:
本質上,這種行為會導致兩個具有相同名稱的單獨綁定,一個是區塊作用域,另一個是函數作用域。
結論
雖然ES6 中的區塊級函數提供了擴展功能,但理解它們的精確語義(包括嚴格模式和Web 相容性之間的相互作用)對於確保正確使用並避免潛在的潛在風險至關重要。陷阱。
免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。
Copyright© 2022 湘ICP备2022001581号-3