关于 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
赋值,所以会造成上面的现象。
希望有大佬给一个解答,感谢。
我其他的关于循环依赖的一些问题都写在了 循环加载 一文中,有兴趣的朋友欢迎交流一下。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论