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 呢?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
AMD的[]里不止是会先加载,还要等[]里面的执行完了,回调function(){...}才会被调用
这个是requireJs的实现原理,依赖提前执行,必须先等模块所有的依赖加载完成后,才能执行回调函数。requireJS其中一个作用是实现js文件的异步加载,说的是这个模块的加载,而不是这个模块的依赖,该模块加载时,不阻塞页面其他资源的加载,避免网页失去响应