先放上一個xmind的總結

commonJS [常用]
NodeJS 是 CommonJS 規(guī)范的實現(xiàn),CommonJS 是一種只適用于 JavaScript 的靜態(tài)模塊化規(guī)范。只適用于 Node.js 開發(fā),但是不適合瀏覽器環(huán)境。
特點:
? ? 1>同步加載;
? ? 2>主要用于服務器端,不適合前端;
? ? 3>在服務器端,模塊的加載是運行時同步加載的;
? ? 4>在瀏覽器端,無法直接運行在瀏覽器端上,需要通過工具轉換成標準的 ES5 ;
? ? 5>所有代碼都運行在模塊作用域,不會污染全局作用域;
? ? 6>模塊可以多次加載,但是只會在第一次加載時運行一次,然后運行結果就被緩存了,以后再加載,就直接讀取緩存結果。要想讓模塊再次運行,必須清除緩存;
? ? 7>模塊加載的順序,按照其在代碼中出現(xiàn)的順序。
實現(xiàn):
NodeJS
使用:
引入模塊:
如果是第三方模塊,xxx?為模塊名;如果是自定義模塊,?xxx?為模塊文件路徑。

暴露模塊

AMD
AMD,異步模塊定義。瀏覽器的模塊,不能采用“同步加載”,只能采用“異步加載”,因此 AMD 產(chǎn)生了。與 CommonJS 最大的不同在于它采用異步的方式去加載依賴的模塊。
特點:
專門用于瀏覽器端;
模塊的加載是異步的, 模塊的加載不影響它后面語句的運行。所有依賴這個模塊的語句,都定義在一個回調(diào)函數(shù)中,等到加載完成之后,這個回調(diào)函數(shù)才會運行;
使用:
引入模塊:

定義模塊:
模塊必須采用特定的?define()?函數(shù)來定義。
1.定義的模塊不依賴其他模塊

2.定義的模塊依賴其他模塊,那么?define()?函數(shù)的第一個參數(shù),必須是一個數(shù)組.

實現(xiàn):
RequireJS
通過?define?方法,將代碼定義為模塊;通過?require?方法,實現(xiàn)代碼的模塊加載。
RequireJS 引入的文件(模塊),只會解釋執(zhí)行一次,所以引入的模塊也可用作全局變量。
RequireJS 要求,每個模塊是一個單獨的 js 文件。