Skip to content
Advertisement

Why does babel rewrite imported function call to (0, fn)(…)?

Given an input file like

JavaScript

babel will compile it to

JavaScript

but when compiled in loose mode the function call is output as _b.a();

I’ve done some research into where the comma operator is added in the hope there was a comment explaining it. The code responsible for adding it is here.

Advertisement

Answer

(0, _b.a)() ensures that the function _b.a is called with this set to the global object (or if strict mode is enabled, to undefined). If you were to call _b.a() directly, then _b.a is called with this set to _b.

(0, _b.a)(); is equivalent to

JavaScript

(the , is the comma operator, see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Comma_Operator).

User contributions licensed under: CC BY-SA
1 People found this is helpful
Advertisement