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/46080502/

相关文章:

javascript - 获取边界矩形中的所有文本

javascript - tiniMCE 不在 jsPanel 中初始化

javascript - 将rest api返回的json对象转换为ES6类的实例是一个好习惯吗?

javascript - 延迟加载组件时出现意外 token

reactjs - 模块构建失败: ReferenceError: [BABEL]

javascript - 使用ajax从函数重新加载php数据

javascript - 我想将 Firebase 中的数据检索到 HTML 文本框中,然后更新 Firebase 中的数据

javascript - 遍历嵌套的对象数组,呈现不同的标记

javascript - 为什么这段代码中有 'undefined'?

javascript - 将 setInterval ID 解析为其参数函数