关于 import export 循环依赖的问题

关于 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 赋值,所以会造成上面的现象。

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

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

阅读 2.2k
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题