ホームページ > ウェブフロントエンド > jsチュートリアル > Babel が Strict モードでインポートされた関数呼び出しの前にカンマ演算子を挿入するのはなぜですか?

Babel が Strict モードでインポートされた関数呼び出しの前にカンマ演算子を挿入するのはなぜですか?

Mary-Kate Olsen
リリース: 2024-11-29 18:00:19
オリジナル
203 人が閲覧しました

Why Does Babel Insert a Comma Operator Before Imported Function Calls in Strict Mode?

関数呼び出しにおける Babel の謎のカンマ演算子を理解する

Babel のコンパイル プロセスでは、インポートされた関数呼び出しが変換され、カンマが挿入されることがユーザーに観察されました。関数名の前に(,)が入ります。この動作により、この変更の背後にある目的と理論的根拠について疑問が生じます。

入出力コード例を調べると、Babel の厳密モードのコンパイル結果が次の構文になることは明らかです。

(0, _b.a)();
ログイン後にコピー

ただし、ルーズ モードでは、この変換は行われず、通常の関数呼び出しのみが残ります。

_b.a();
ログイン後にコピー

謎は次のとおりです。カンマ演算子の挿入。この謎を解明するには、この変換を担当するコードを詳しく調べる必要があります。

調査すると、Babel がコンマ演算子を使用して、インポートされた関数がグローバル オブジェクトまたはグローバル オブジェクトのコンテキストで確実に呼び出されることを発見しました。厳密モードが有効な場合は未定義。これは、次の JavaScript コードによって実現されます。

0; // Ignore result
var tmp = _b.a;
tmp();
ログイン後にコピー

本質的に、カンマ演算子は、インポートされた関数 (_b.a) への参照を保持する一時変数 (tmp) を作成します。 _b.a() の代わりに tmp() を呼び出すことにより、Babel は関数が正しい実行コンテキストで呼び出されることを保証します。

言い換えると、"(0, _b.a)() は呼び出しと同等です。これにより、予期しない動作を引き起こす可能性がある、this と _b の誤ったバインドが防止されます。

以上がBabel が Strict モードでインポートされた関数呼び出しの前にカンマ演算子を挿入するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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