关于 import export 循环依赖的问题

发布于 2022-09-12 13:16:39 字数 1252 浏览 9 评论 0

关于 ES6 Module 的循环依赖机制有个小问题,关于 export default 的。

//a.mjs
import bar from './b.mjs';

function foo(invoker) {
    console.log(invoker + ' invokes foo.js');
    bar('foo.js');
}

foo('index.js');
export default foo;
//b.mjs
import foo from './a.mjs';
let invoked = false;
function bar(invoker) {
    if (!invoked) {
        invoked = true;
        console.log(invoker + ' invokes bar.js');
        foo('bar.js');
    }
}
export default bar;

执行 a.mjs,在执行到 bar 函数中调用 foo 的地方报错:ReferenceError: Cannot access 'foo' before initialization

a.mjs 中的 foo() 调用移动到 export default 之后能正常运行,或者把 export default 改成普通的 export {} 形式也可以。

我猜想是不是 export default 也只是把后面的值传给 default(假想成一个变量之类的),然后这个 default 类似于 let 有暂时性死区,只有执行到 export default 这一句时才给 default 赋值,所以会造成上面的现象。

希望有大佬给一个解答,感谢。

我其他的关于循环依赖的一些问题都写在了 循环加载 一文中,有兴趣的朋友欢迎交流一下。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文