AMD(異步模塊定義規(guī)范)制定定義模塊的規(guī)則袁翁,模塊和模塊的依賴是異步加載的柴底。
AMD通過(guò)define()函數(shù)定義一個(gè)模塊:
define(?id, dependencies?, factory );
id:為模塊的名字,可選粱胜,
dependencies:該模塊所依賴模塊的數(shù)組柄驻,可選,模塊名可以是相對(duì)或者絕對(duì)焙压,忽略此參數(shù)則默認(rèn)為["require", "exports", "module"]
factory:模塊初始化要執(zhí)行的函數(shù)或?qū)ο蠛枧В瘮?shù)則執(zhí)行一次,對(duì)象則為模塊的輸出值涯曲。
一些例子:
創(chuàng)建一個(gè)名為"alpha"的模塊答憔,使用了require,exports掀抹,和名為"beta"的模塊:
define("alpha", ["require", "exports", "beta"], function (require, exports, beta) {
exports.verb = function() {
return beta.verb();
//Or:
return require("beta").verb();
}
});
一個(gè)返回對(duì)象的匿名模塊:
define(["alpha"], function(alpha){
return {
verb: function(){
return alpha.verb() + 2;
}
}
})
一個(gè)沒(méi)有依賴性的模塊可以直接定義對(duì)象:
define({
add: function(x, y) {
return x + y;
}
})
使用CommonJS轉(zhuǎn)換的模塊定義:
define(function(require, exports, module) {
var a = require('a'),
b = require('b');
exports.action = function(){};
})
CMD規(guī)范
在CMD中,一個(gè)模塊就是一個(gè)文件城榛,通過(guò)define()函數(shù)定義一個(gè)模塊
define(factory);
factory可以是一個(gè)函數(shù)狠持,也可以是一個(gè)對(duì)象或者字符串。當(dāng)為函數(shù)的時(shí)候正勒,如果指定參數(shù),則必須為require、exports败京、module的順序,即:
define(function(require, exports, module) {
})
其中require引入一個(gè)外部模塊隧甚,當(dāng)這個(gè)外部模塊沒(méi)有被返回時(shí),應(yīng)該返回null帽借。
require.async()函數(shù)為加載異步加載的模塊。
exports對(duì)象用來(lái)導(dǎo)出模塊中的方法等脆荷。
module對(duì)象:module.uri為該模塊的完整uri路徑,module.dependencies為該模塊需要的外部模塊剑肯,module.exports等同于exports
其中模塊名必須為一個(gè)字符串师痕,模塊標(biāo)識(shí)符可以沒(méi)有后綴丸凭,模塊路徑可以是相對(duì)路徑
math.js
define(function(require, exports, module) {
exports.add = function() {
var sum = 0, i = 0, args = arguments, l = args.length;
while (i < l) {
sum += args[i++];
}
return sum;
};
});
increment.js
define(function(require, exports, module) {
var add = require('math').add;
exports.increment = function(val) {
return add(val, 1);
};
});
program.js
define(function(require, exports, module) {
var inc = require('increment').increment;
var a = 1;
inc(a); // 2
module.id == "program";
});
模塊中factory不是函數(shù)的
define({
foo: "bar"
})
define([
"foo",
"bar"
])
define('foo bar')
最后是一個(gè)廣告貼狠裹,最近新開(kāi)了一個(gè)分享技術(shù)的公眾號(hào),歡迎大家關(guān)注??