AMD 的模块加载和回调执行

公司使用 angularAMD 实现按需加载,其中使用 require.js 来加载模块,查了下网上的资料。发现阮一峰《Javascript模块化编程(三):require.js的用法》一文中,有这样一段话:

require()函数接受两个参数。第一个参数是一个数组,表示所依赖的模块,上例就是['moduleA', 'moduleB', 'moduleC'],即主模块依赖这三个模块;第二个参数是一个回调函数,当前面指定的模块都加载成功后,它将被调用。加载的模块会以参数形式传入该函数,从而在回调函数内部就可以使用这些模块。

// main.js
  require(['moduleA', 'moduleB', 'moduleC'], function (moduleA, moduleB, moduleC){
    // some code here
  });

其中

第二个参数(即回调函数),当前面指定的模块都加载成功后,它将被调用。

那么他不还是同步加载吗? 如果我引入了 jQuery,我在 callback 中传入$,但是在 jQuery 没有加载完成之前,又如何能执行 callback 呢?

阅读 3.4k
2 个回答

AMD的[]里不止是会先加载,还要等[]里面的执行完了,回调function(){...}才会被调用

这个是requireJs的实现原理,依赖提前执行,必须先等模块所有的依赖加载完成后,才能执行回调函数。requireJS其中一个作用是实现js文件的异步加载,说的是这个模块的加载,而不是这个模块的依赖,该模块加载时,不阻塞页面其他资源的加载,避免网页失去响应

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
宣传栏