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

Babel がインポートされた関数呼び出しにカンマ演算子 (0,) を追加するのはなぜですか?

Patricia Arquette
リリース: 2024-11-30 19:36:13
オリジナル
767 人が閲覧しました

Why Does Babel Add a Comma Operator (0,) to Imported Function Calls?

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 サイトの他の関連記事を参照してください。

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