模块化相互依赖会引发哪些问题

最近准备用 exportimport 对 js 代码模块化。

实作过程中,我做了一个骚操作,就是两个模块相互依赖引用,被主管一顿炮轰。代码示例如下:

import A from A

export class B {
   //......
}
import B from B

export class A {
   //......
}

也就是说,A 中会用到 B,B 中会用到 A,但是 A 和 B 使用层级差别的,A 更高。

这样的设计很明显是不对的,但是我不能很好的表达这样设计的缺陷。

然后我浏览了下网上,也有人说这样的设计有时候很正常,所以我现在就很懵逼 A___A

所以想请教一下大家,我上述这样的模块间的依赖设计,有哪些缺点,在哪些情景下这样的设计是合理的?### 问题描述

阅读 3.1k
1 个回答

深入 CommonJs 与 ES6 Module
因为es module的导出是动态绑定的,只要你不是导入模块就立马调用就可以
循环引用导入模块立刻调用可以用 function 的声明提升解决,但在 function 内不要用到外部变量


ps: 我在这里回答一下评论的内容,这样更直观一点

我举一个问题:

a.name = 'xx'

上面代码为什么会报错?这样写有什么缺点?

回答:
你需要在用之前先对a变量进行定义,并赋值为引用类型
或者利用 function 的声明提升做到

追问:
这样的代码会导致什么问题,原理是什么,有什么缺点,我并不是要知道解决方式

这个我 不知道怎么回答(缺点是你的代码会报错?),因为错误的代码必然会报错,修改为正确的代码就行了

模块循环引用就跟这个例子一样,只需要写正确的代码就行了
nodejs文档中有句话:

需要仔细的规划, 以允许循环模块依赖在应用程序内正常工作.

模块循环引用的缺点就是:不理解模块循环原理 或者 项目庞大混乱的模块出现直接或间接的循环引用 所导致的错误代码,使得程序偏离预期的工作

推荐问题
宣传栏