为什么 require() 返回模块导出的“未完成的副本”而不是对它的引用循环依赖?

问题描述

require() 函数的通常行为是使用缓存。因此,如果多个模块请求另一个模块,则所有模块都获得对表示所需导出的同一个对象的引用。但是,根据 docs一个例外:

main.js加载a.js时,a.js依次加载b.js。在那时候, b.js 尝试加载 a.js。为了防止无限循环, a.js 导出对象的未完成副本返回到 b.js 模块。 b.js 然后完成加载,并提供其导出对象 到 a.js 模块。

这种行为往往会导致不一致,因为模块从 require() 接收的内容取决于该模块本身的优先级(b.jsa.js 之后是必需的,因此前者得到a.js export 的未完成副本,而后者直接引用了 b.js export)。

这种方法的基本原理是什么?为什么无法将 a.js 导出的缓存版本返回到 b.js(在 main.js 请求 a.js 时创建)?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...