gpt4 book ai didi

javascript - Babel 的有趣导入

转载 作者:数据小太阳 更新时间:2023-10-29 04:36:46 26 4
gpt4 key购买 nike

因为我知道目前没有浏览器实现 ES6 模块接口(interface)——但转译器实现了——我用这个简单的例子测试了 babel

import { getUsefulContents } from "file.js";
getUsefulContents("http://www.example.com", data => {
doSomethingUseful(data);
});

我只是想看看它是如何转换这些行的。令我惊讶的是,它产生了以下输出:

"use strict";

var _fileJs = require("file.js");

(0, _fileJs.getUsefulContents)("http://www.example.com", function (data) {
doSomethingUseful(data);
});

最后一行对我来说很神秘——尤其是 (0, _fileJs.getUsefulContents) 部分,那里发生了什么?该行的 (0, ...) 的目的是什么?

最佳答案

调用这样的函数会强制它在全局上下文中调用它。

function whoAmI() {
document.querySelector('pre').innerText += this.name + '\n';
}
window.name = 'window';
var mike = {
name: 'mike',
whoAmI: whoAmI
};
mike.whoAmI();
(0, mike.whoAmI)();
<pre></pre>

之所以可行,是因为当它计算 (0, filesJs) 时,它会遍历括号中的每个语句,类似于使用 ,< 声明多个变量的方式

var a = 1,
b = 2,
...

由于最后一个表达式是对函数的引用,因此在使用下一组括号评估函数调用时会使用它。因为表达式已经被求值,所以 _filesJs 上下文丢失了。它实际上与这样做相同:

0; // Legal, just pointless
var f = _filesJs.getUsefulContents;
f("http://example.com", ...);

关于javascript - Babel 的有趣导入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31034945/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com