为什么 Babel 的编译输出中有 (0, Babel Function Call) ?
从外部模块导入函数并在代码中使用它们时,你可能会注意到 Babel 转换后的输出中有一个有趣的行为。函数以 (0, fn)(...) 的形式包装。这与在松散模式下编译时不带逗号运算符的原始函数调用不同。
此转换有特定目的:它确保函数的 this 上下文设置为全局对象在非严格模式下或在严格模式下未定义。当直接调用 _b.a() 时,this 将默认为 _b 模块对象。
通过使用 (0, _b.a)(),Babel 强制将 this 设置为适当的值来调用的函数。逗号运算符 (,) 本质上丢弃前面表达式的返回值(在本例中为 0)并计算右侧,即本实例中的函数调用。
本质上,转换后的代码相当于:
0; // Ignore result var tmp = _b.a; tmp();
此技术保证函数的 this 上下文与预期一致行为。
以上是为什么 Babel 在调用导入函数时使用 `(0, fn)(...)` ?的详细内容。更多信息请关注PHP中文网其他相关文章!