CommonJS是主要爲了JS在後端的表現制定的,他是不適合前端的,AMD(異步模塊定義)出現了,它就主要爲前端JS的表現制定規範。前端
在兼容CommonJS的系統中,你能夠使用JavaScript開發如下程序:git
(1).服務器端JavaScript應用程序
(2).命令行工具
(3).圖形界面應用程序
(4).混合應用程序(如,Titanium或Adobe AIR)github
瀏覽器不兼容CommonJS的根本緣由,在於缺乏四個Node.js環境的變量。後端
- module
- exports
- require
- global
只要可以提供這四個變量,瀏覽器就能加載 CommonJS 模塊。api
AMD是"Asynchronous Module Definition"的縮寫,意思就是"異步模塊定義"。它採用異步方式加載模塊,模塊的加載不影響它後面語句的運行。全部依賴這個模塊的語句,都定義在一個回調函數中,等到加載完成以後,這個回調函數纔會運行。數組
AMD也採用require()語句加載模塊,可是不一樣於CommonJS,它要求兩個參數:瀏覽器
require([module], callback);服務器
第一個參數[module],是一個數組,裏面的成員就是要加載的模塊;第二個參數callback,則是加載成功以後的回調函數。若是將前面的代碼改寫成AMD形式,就是下面這樣:curl
require(['math'], function (math) {異步
math.add(2, 3);
});
math.add()與math模塊加載不是同步的,瀏覽器不會發生假死。因此很顯然,AMD比較適合瀏覽器環境。目前,主要有兩個Javascript庫實現了AMD規範:require.js和curl.js。
大名遠揚的玉伯寫了seajs,就是遵循他提出的CMD規範,與AMD蠻相近的,不過用起來感受更加方便些,最重要的是中文版,應有盡有:seajs官方doc