RequireJS 基本实现原理如下
- 紧紧盯住require函数中依赖的模块状态,只有当这些依赖模块状态都为loaded则可以进行回调函数的执行
- 当然require函数中的依赖模块本身可能也依赖其他模块,那么这就是一个递归的过程,不断下钻去加载依赖模块的依赖模块,直到找到最简单的模块(没有任何依赖的模块),这样看起来就是一个依赖树,最简单模块就是树的叶子节点,那么它的状态必然是loaded
- 当每次脚本加载成功之后我们就进行全局检查,检查当前脚本模块的父亲节点的状态是否是loaded,若不是则检查父亲节点的依赖模块是否全部为loaded,若都为loaded那么父亲节点的状态就可以更新为loaded,我们按照此方法递归检查父亲的父亲节点
- 检查到最后,直到根节点状态为loaded,那么依赖模块就全部加载完毕了