1. ホーム
  2. javascript

[解決済み] なぜ babel は import された関数呼び出しを (0, fn)(...) に書き換えるのでしょうか?

2022-10-11 09:42:54

質問

のような入力ファイルがあるとします。

import { a } from 'b';

function x () {
  a()
}

babel はこれを次のようにコンパイルします。

'use strict';

var _b = require('b');

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

として出力されますが、ルーズモードでコンパイルされた場合、関数呼び出しは _b.a();

コンマ演算子がどこで追加されるのか、それを説明するコメントがあることを期待して、いくつか調査してみました。 追加を担当しているコードは ここに .

どのように解決するのですか?

(0, _b.a)() は、関数を確実に _b.a が呼び出されるように this をグローバルオブジェクトに設定し (ストリクトモードが有効な場合は undefined ). もし、あなたが _b.a() を直接呼び出すとしたら _b.a が呼び出されるのは this に設定された _b .

(0, _b.a)(); と同じです。

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

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