関数呼び出しにおける 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 サイトの他の関連記事を参照してください。