題目1: 為什么要使用模塊化?
-
最主要的目的:
- 解決命名沖突
- 依賴管理
-
其他價(jià)值
- 提高代碼可讀性
- 代碼解耦属瓣,提高復(fù)用性
題目2: CMD载迄、AMD、CommonJS 規(guī)范分別指什么抡蛙?有哪些應(yīng)用
CMD 規(guī)范
CMD(Common Module Definition)是 SeaJS 在推廣過程中對模塊定義的規(guī)范化產(chǎn)出
與 AMD 的不同在于护昧,AMD 推崇依賴前置會在一開始加載好所有需要的模塊,而 CMD 則推崇依賴就近粗截,當(dāng)需要時(shí)才加載
// 初始化
seajs.use(["init.js"],function(init){})
//init.js
define(function(require, exports, module) {
var math = require('math')
console.log(math.add(1,2)) // 3
});
//math.js
define(function(require, exports, module){
var Add = function(x,y){
return x + y
}
return {
add: Add
}
})
AMD 規(guī)范
AMD (Asynchronous Module Definition)惋耙,中文名是異步模塊定義的意思。它是一個(gè)在瀏覽器端模塊化開發(fā)的規(guī)范
由于不是JavaScript原生支持熊昌,使用AMD規(guī)范進(jìn)行頁面開發(fā)需要用到對應(yīng)的庫函數(shù)绽榛,也就是大名鼎鼎RequireJS,實(shí)際上AMD 是 RequireJS 在推廣過程中對模塊定義的規(guī)范化的產(chǎn)出
// main.js
require(['math'],function(math){
console.log(math.add(1,2)) // 3
})
//math.js
define(function(){
var Add = function(x,y){
return x + y
}
return {
add: Add
}
})
CommonJS 規(guī)范
CommonJS 是服務(wù)器端模塊的規(guī)范婿屹,Node.js采用了這個(gè)規(guī)范灭美。Node.JS首先采用了js模塊化的概念。
-
在一個(gè)模塊中选泻,存在一個(gè)自由的變量”require”冲粤,它是一個(gè)函數(shù)。
- 這個(gè)
require
函數(shù)接收一個(gè)模塊標(biāo)識符页眯。 -
require
返回外部模塊所輸出的API梯捕。 - 如果出現(xiàn)依賴閉環(huán)( dependency cycle ),那么外部模塊在被它的傳遞依賴(transitive dependencies)所require的時(shí)候可能并沒有執(zhí)行完成窝撵;在這種情況下傀顾,
require
返回的對象必須至少包含此外部模塊在調(diào)用require函數(shù)(會進(jìn)入當(dāng)前模塊執(zhí)行環(huán)境)之前就已經(jīng)準(zhǔn)備完畢的輸出。 - 如果請求的模塊不能返回碌奉,那么
require
必須拋出一個(gè)錯(cuò)誤短曾。
- 這個(gè)
在一個(gè)模塊中,會存在一個(gè)名為
exports
的自由變量赐劣,它是一個(gè)對象嫉拐,模塊可以在執(zhí)行的時(shí)候把自身的API加入到其中。模塊必須使用
exports
對象來做為輸出的唯一表示魁兼。
// node.js 中啟動 init.js
var math = require ( 'math.js' )
console.log ( math.add (1, 2 ) ) // 3
// math.js
var Add = function(x,y){
return x + y
}
module.exports = {
add: Add
}