ES6 規範引入了區塊級函數,允許在區塊內聲明函數。理解它們的語義對於有效編程至關重要。
Setting | Visible Outside Block | Hoisted | Hoisting Scope | Temporal Dead Zone |
---|---|---|---|---|
Non-strict, No Web Extensions | No | No | N/A | N/A |
Strict, No Web Extensions | No | Yes | Block Level | Yes |
Non-strict, With Web Extensions | Yes | Yes | Function Level | Before Block |
Strict, With Web Extensions | Yes | Yes | Function Level | Before Block |
本文中的「嚴格模式」指的是函數或腳本的嚴格性,其中包含函數宣告的區塊出現,而不是函數本身。 「Web 擴充功能」僅適用於具有「正常」函數外觀(無名稱衝突)的草率(非嚴格)程式碼。
在純 ES6 中(沒有「Web 擴展」),區塊中的函數聲明具有一致的語義無論嚴格程度如何。它們被提升到區塊的頂部,並且行為類似於常規函數聲明。
透過“Web 擴充”,草率模式引入了額外的語義。區塊內的函數宣告會作為 var 宣告提升到封閉函數的頂部,並且在計算函數宣告時將函數物件指派給該變數。
這會導致同一物件有兩個綁定標識符:一個函數作用域(在區塊外可見)和一個區塊作用域(僅在區塊內可見)。函數作用域的綁定初始化為 undefined ,直到函數被聲明,此時它被指派函數物件。
在區塊執行中遇到函數宣告之前,函數作用域的綁定是未定義的並且存取它會拋出例外。
以上是ES6 區塊級函數在嚴格和非嚴格模式下(有或沒有 Web 擴充)如何表現?的詳細內容。更多資訊請關注PHP中文網其他相關文章!