ホームページ > ウェブフロントエンド > jsチュートリアル > ES6 では、異なる Strict モードと Web Extensions 設定の下でブロックレベル関数はどのように動作しますか?

ES6 では、異なる Strict モードと Web Extensions 設定の下でブロックレベル関数はどのように動作しますか?

Susan Sarandon
リリース: 2024-12-19 20:43:10
オリジナル
310 人が閲覧しました

How Do Block-Level Functions Behave in ES6 Under Different Strict Mode and Web Extensions Settings?

ES6 のブロックレベル関数の微妙なセマンティクスを理解する

ES6 でのブロックレベル関数の導入により、徹底的な徹底が必要となる複雑さが生じました。検査。これらは厳密モードでのブロックホイスティングとスコープ制限のルールに従うという概念にもかかわらず、オプションの「Web 拡張機能」の規定によりさらに複雑な要素が作成されます。

これらのセマンティクスを明確にするために、次の表を考慮してください。さまざまな条件でのブロックレベルの関数宣言:

Mode Web Extensions Visible Outside Block Hoisted TDZ
Non-Strict, No Extensions No Yes, as a var Yes, to Function and Block Undefined Before Block
Strict, No Extensions No No Yes, to Block N/A

|非厳密、拡張機能付き |はい |はい、var として |はい、関数とブロックへ |関数宣言前に未定義 |

|厳密、拡張機能付き |はい |はい、var として |はい、ブロックします | N/A |

主な違いは、「厳密モード」の概念にあります。ブロックレベル関数のコンテキストでは、厳密モードは、関数宣言を含むブロックが出現する関数 (またはスクリプト)の厳密性を指します。関数の厳密性ではありません

Web 拡張機能を使用した非厳密モードでは、ブロック内の関数宣言は、その名前が仮パラメータと競合していないか、字句的に宣言されていない場合に「正常」であるとみなされます。変数。このような場合、追加の var 宣言が外側の関数スコープにホイストされ、関数宣言の評価時に関数オブジェクトがこの変数に割り当てられます。

この動作は次のコード構造を反映しています。

function enclosing(...) {
    var compat₀ = undefined;
    {
        let compat₁ = function compat(…) { … };
        compat₀ = compat₁;
    }
}
ログイン後にコピー

したがって、関数は var 宣言と同様に、ブロックの外から見えるようになります。ただし、追加のブロック スコープのバインディングがブロック内に存在します。

厳密モードでは、Web 拡張機能に関係なく、ブロックレベルの関数がブロックの先頭にホイストされ、その可視性はそのブロック内に制限されます。

前述のセマンティクスが常に実際の実装に直接変換されるわけではないことに注意することが重要です。 ES6 実装間の不一致は珍しいことではなく、実装の違いに関係なく、ES6 仕様自体を理解することの重要性を強調しています。

以上がES6 では、異なる Strict モードと Web Extensions 設定の下でブロックレベル関数はどのように動作しますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート