1.為什么要使用模塊化?
如今CPU、瀏覽器性能得到了極大的提升,很多頁面邏輯遷移到了客戶端(表單驗證等),隨著web2.0時代的到來,Ajax技術得到廣泛應用,jQuery等前端庫層出不窮,前端代碼日益膨脹。
這時候JavaScript作為嵌入式的腳本語言的定位動搖了,JavaScript卻沒有為組織代碼提供任何明顯幫助,甚至沒有類的概念,更不用說模塊(module)了,JavaScript極其簡單的代碼組織規范不足以駕馭如此龐大規模的代碼
模塊化優點
- 解決命名沖突,各模塊內部變量,無法被其他模塊讀取(全局變量除外)。
- 依賴管理
- 提高代碼可讀性
- 代碼解耦,提高復用性
2.CMD、AMD、CommonJS 規范分別指什么?有哪些應用
CMD:通用模塊定義(Common Module Definition)
應用: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)
應用: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')) //構造函數實例化
})
CommonJS:CommonJS 擴展了JavaScript聲明模塊的API.
CommonJS模塊可以很方便得將某個對象導出,讓他們能夠被其他模塊通過 require 語句來引入。通過CommonJS,每個JS文件獨立地存儲它模塊的內容(就像一個被括起來的閉包一樣)。主要應用node.js