1.定义:
define(id, deps, function (require, exports,module) {
var a = require('/a')
a.doSomething()
})
2.例子
// main.js
define(function(require, exports, module){
document.onclick = function(){
var a = require('/a')
a.test()
}
})
// a.js
define(function(require, exports,module){
exports.test = function(){
console.log('a.test')
}
})
3. return 方式向外提供接口
define(function(require, exports, module){
return {
foo: 'bar'
}
})
4.入口
<script>
seajs.use(id, callback)
seajs.use(['./a', './b'], function(a, b){})//并发加载模块 a 和模块 b,并在都加载完成时,执行指定回调
</script>
5.DOMReady
seajs.use(['jquery', './main.js'], function($, main){
$(document).ready(function(){
})
})
6.循环加载
7.比较
a、所依赖模块的执行时机
对于依赖的模块,AMD是提前执行,CMD是延迟执行
AMD在加载模块完成后就会执行该模块,所有模块都加载执行完后会进入require的回调函数,执行主逻辑,这样的效果就是依赖模块的执行顺序和书写顺序不一定一致,看网络速度,哪个先下载下来,哪个先执行,但是主逻辑一定在所有依赖加载完成后才执行。不过,新版本的RequireJS也可以延迟执行
CMD加载完某个依赖模块后并不执行,只是下载而已,在所有依赖模块加载完成后进入主逻辑,遇到require语句的时候才执行对应的模块,这样模块的执行顺序和书写顺序是完全一致的。如果使用require.async()方法,可以实现模块的懒加载,即不执行不下载
b、CMD推崇依赖就近,AMD推崇依赖前置