Babel のコンパイル済み出力に (0, Babel Function Call) があるのはなぜですか?
外部モジュールから関数をインポートしてコードで使用する場合、 Babel の変換された出力で興味深い動作に気づくかもしれません。関数は (0, fn)(...) の形式でラップされます。これは、ルーズ モードでコンパイルした場合のカンマ演算子のない元の関数呼び出しとは異なります。
この変換には特定の目的があります。関数の this コンテキストがグローバル オブジェクトのいずれかに設定されるようにします。非厳密モードの場合、または厳密モードの未定義。 _b.a() を直接呼び出す場合、this はデフォルトで _b モジュール オブジェクトになります。
(0, _b.a)() を使用すると、Babel は強制的にthis を適切な値に設定して呼び出される関数。コンマ演算子 (,) は基本的に、前の式の戻り値 (この場合は 0) を破棄し、このインスタンスの関数呼び出しである右側を評価します。
本質的に、変換されたコードは次と同等です:
0; // Ignore result var tmp = _b.a; tmp();
この手法は、関数の this コンテキストが期待されるものと一致していることを保証します。行動。
以上がBabel がインポートされた関数を呼び出すときに `(0, fn)(...)` を使用するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。