Babel での関数呼び出しの書き換え: カンマ演算子を理解する
人気の JavaScript コンパイラーである Babel は、ES6 コードを古いブラウザーと互換性のあるバージョンに変換します。インポートされたモジュールからの関数呼び出しが発生すると、Babel は呼び出しの先頭にカンマ演算子 (0,) を追加することがよくあります。この動作は、その目的について疑問を引き起こします。
具体的には、インポート関数呼び出しを含む入力ファイル:
import { a } from 'b'; function x () { a() }
は、Babel によって次のようにコンパイルされます:
'use strict'; var _b = require('b'); function x() { (0, _b.a)(); }
デフォルトの動作は厳密モードでコンパイルすることであるため、(0,) となります。ルーズ モードでは、関数呼び出しはカンマ演算子なしで _b.a() として出力されます。
カンマ演算子の説明
(0,) を追加すると、インポートされた関数が this 値としてグローバル オブジェクトを使用して呼び出されること、または厳密モードが有効な場合は未定義であること。カンマがないと、_b.a() は _b を this 値として呼び出されます。
カンマ演算子は最初の式 (0) を未定義と評価し、その結果を無視します。次に、2 番目の式 (_b.a) を評価し、それを一時変数 (tmp) に割り当てます。最後に、グローバル オブジェクトを this 値として使用して、一時変数 (tmp()) を呼び出します。
本質的に、この手法により、インポートされた関数が呼び出し元コンテキストの this 値に影響を与えることなくグローバルに動作できるようになります。
結論
Babel はインポートされた関数呼び出しでカンマ演算子を使用することで、関数が正しく呼び出されることを保証します。呼び出しコンテキストに関係なく。この手法は、最初のカンマ式の結果を破棄し、グローバル オブジェクトを this 値として持つ一時変数を呼び出すことによって実装されます。
以上がBabel がインポートされた関数呼び出しにカンマ演算子 (0,) を追加するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。