javascript - 为什么 babel 将导入的函数调用重写为 (0, fn)(...) ?

标签 javascript ecmascript-6 babeljs

给定一个输入文件,例如

import { a } from 'b';

function x () {
  a()
}

babel 会将其编译为

'use strict';

var _b = require('b');

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

但在松散模式下编译时,函数调用输出为 _b.a();

我对逗号运算符的添加位置进行了一些研究,希望有评论对其进行解释。 负责添加它的代码是 here .

最佳答案

(0, _b.a)() 确保调用函数 _b.a 时将 this 设置为全局对象 (或者,如果启用了严格模式,则为未定义)。如果您直接调用 _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 )。

关于javascript - 为什么 babel 将导入的函数调用重写为 (0, fn)(...) ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41986316/

相关文章:

javascript - 功能组件从父组件接收数组并通过它进行映射

javascript - 语法错误 : Invalid or unexpected token when testing react application with babel and jest

javascript - 当 "Unexpected tab character"规则设置为 "indent"时,ESLint "tab"

reactjs - 通天塔 : can't get "@babel/plugin-transform-destructuring" plugin to work

javascript - JS : If variable gets object from a function, 变量是否存储对象的内容或对象的链接?

javascript - 使用调用、应用、绑定(bind)的箭头功能 - 不起作用?

javascript - 如何将对象转换为对象数组?

php - 无法将 PHP 变量传递给 Javascript 函数

javascript - jsPDF添加图表

javascript - 在react.js和Yii2 API中上传文件