Welcome to OStack Knowledge Sharing Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
2.8k views
in Technique[技术] by (71.8m points)

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

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

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


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Answer

0 votes
by (71.8m points)
等待大神解答

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
...