首頁 >web前端 >js教程 >ES6 區塊級函數在嚴格和非嚴格模式下(有或沒有 Web 擴充)如何表現?

ES6 區塊級函數在嚴格和非嚴格模式下(有或沒有 Web 擴充)如何表現?

DDD
DDD原創
2024-12-17 01:39:26434瀏覽

How Do ES6 Block-Level Functions Behave in Strict and Non-Strict Modes, with and without Web Extensions?

ES6 中的區塊級函數:語義精確度

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 相容性語義

透過“Web 擴充”,草率模式引入了額外的語義。區塊內的函數宣告會作為 var 宣告提升到封閉函數的頂部,並且在計算函數宣告時將函數物件指派給該變數。

這會導致同一物件有兩個綁定標識符:一個函數作用域(在區塊外可見)和一個區塊作用域(僅在區塊內可見)。函數作用域的綁定初始化為 undefined ,直到函數被聲明,此時它被指派函數物件。

在區塊執行中遇到函數宣告之前,函數作用域的綁定是未定義的並且存取它會拋出例外。

以上是ES6 區塊級函數在嚴格和非嚴格模式下(有或沒有 Web 擴充)如何表現?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn