なぜBabelはインポートされた関数呼び出しを(0, fn)(...)に書き換えるのでしょうか? 質問する

なぜBabelはインポートされた関数呼び出しを(0, fn)(...)に書き換えるのでしょうか? 質問する

次のような入力ファイルがあるとする

import { a } from 'b';

function x () {
  a()
}

babelはそれをコンパイルします

'use strict';

var _b = require('b');

function x() {
  (0, _b.a)();
}

しかし、ルーズモードでコンパイルすると、関数呼び出しは次のように出力されます。_b.a();

カンマ演算子がどこに追加されるのか、それを説明するコメントがあるのではないかと期待して調べてみました。それを追加するコードは次のとおりです。ここ

ベストアンサー1

(0, _b.a)()関数がをグローバル オブジェクト (または厳密モードが有効な場合は ) に設定し_b.aて呼び出されることを保証します。 を直接呼び出す場合は、を に設定して呼び出されます。thisundefined_b.a()_b.athis_b

(0, _b.a)();は以下と同等である

0; // Ignore result
var tmp = _b.a;
tmp();

(は,コンマ演算子です。https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/カンマ演算子)。

おすすめ記事