1.為什么要使用模塊化?
如今CPU、瀏覽器性能得到了極大的提升,很多頁(yè)面邏輯遷移到了客戶端(表單驗(yàn)證等),隨著web2.0時(shí)代的到來(lái),Ajax技術(shù)得到廣泛應(yīng)用,jQuery等前端庫(kù)層出不窮,前端代碼日益膨脹。
這時(shí)候JavaScript作為嵌入式的腳本語(yǔ)言的定位動(dòng)搖了,JavaScript卻沒(méi)有為組織代碼提供任何明顯幫助,甚至沒(méi)有類的概念,更不用說(shuō)模塊(module)了,JavaScript極其簡(jiǎn)單的代碼組織規(guī)范不足以駕馭如此龐大規(guī)模的代碼
模塊化優(yōu)點(diǎn)
- 解決命名沖突,各模塊內(nèi)部變量,無(wú)法被其他模塊讀?。ㄈ肿兞砍猓?。
- 依賴管理
- 提高代碼可讀性
- 代碼解耦,提高復(fù)用性
2.CMD、AMD、CommonJS 規(guī)范分別指什么?有哪些應(yīng)用
CMD:通用模塊定義(Common Module Definition)
應(yīng)用:SeaJS
// 定義模塊 myModule.js
define(function(require, exports, module) {
var $ = require('jquery.js')
$('div').addClass('active');
});
// 加載模塊
seajs.use(['myModule.js'], function(my){
});
AMD:異步模塊定義(Asynchronous Module Definition)
應(yīng)用:RequireJS
// 定義模塊 myModule.js
define(['jquery'], function($){ //引入jquery
function Button($ct){
this.$ct = $ct
this.bind()
}
Button.prototype = {
bind: function(){
this.$ct.click(function(){
$('.box').css({'background': 'red'})
})
}
}
return Button //一定要return出去
})
// 加載模塊
require(['jquery', 'app/myModule'],function($, Button){
new Button($('.button')) //構(gòu)造函數(shù)實(shí)例化
})
CommonJS:CommonJS 擴(kuò)展了JavaScript聲明模塊的API.
CommonJS模塊可以很方便得將某個(gè)對(duì)象導(dǎo)出,讓他們能夠被其他模塊通過(guò) require 語(yǔ)句來(lái)引入。通過(guò)CommonJS,每個(gè)JS文件獨(dú)立地存儲(chǔ)它模塊的內(nèi)容(就像一個(gè)被括起來(lái)的閉包一樣)。主要應(yīng)用node.js