題目1: 為什么要使用模塊化玩焰?
1. 解決命名沖突
2. 依賴管理
3. 可以提高代碼的可讀性
4. 提高代碼的復用性
5. 避免污染全局變量
題目2:CMD、AMD芍锚、CommonJS 規(guī)范分別指什么昔园?有哪些應用
- **AMD(異步模塊定義)**:由于瀏覽器加載腳本天生異步,AMD是一個在瀏覽器牟⑴冢快化開發(fā)的規(guī)范默刚,但是由于元素的js并沒有define()和require(),所以AMD規(guī)范運用了requirejs庫。
- ** CMD(通用模板定義)**:也是異步加載模塊逃魄,它和AMD只是模塊定義的方式和模塊記載的時機不同
AMD和CMD的區(qū)別以及運用
- 都運用于瀏覽器端的異步加載資源
- AMD是全部加載后荤西,然后需求使用,而CMD是按需加載伍俘,就近依賴
- AMD在加載模塊完成后就會執(zhí)行模塊邪锌,所有模快都記載完成后癌瘾,就會進入required的回調函數(shù)觅丰,執(zhí)行主邏輯函數(shù),妨退,這樣的效果就是依賴模塊的執(zhí)行順序和書寫順序不一定一致妇萄,看網(wǎng)絡速度,哪個先下載下來咬荷,哪個先執(zhí)行冠句,但是主邏輯一定在所有依賴加載完成后才執(zhí)行。
- CMD加載完某個依賴模塊后并不執(zhí)行幸乒,只是下載而已懦底,在所有依賴模塊加載完成后進入主邏輯,遇到require語句的時候才執(zhí)行對應的模塊罕扎,這樣模塊的執(zhí)行順序和書寫順序是完全一致的
```
//AMD
define(['jquery','dailog','carousel'],function(jquery,dailog,Carousel){
var $=jquery;
var dailog=dailog;
var Carousel=Carousel;
})
//CMD
//1. 定義一個木厶疲快myModule.js
define(function(require,exports,module){
var $=require(jquery);
$("div").addClass("active");
exports.add=function(){
var i=0;
i++
return i
}
})
define(function(require,exports,module){
var sum=require("myModule").add;
console.log(sum)
})
```
-
CommonJS:是服務器端模快的規(guī)范壳影,Node.js就是運用這個規(guī)范拱层,使用與同步加載資源,一個單獨的文件就是一個难邕郑快根灯,每一個模快都有一個單獨的作用域。
1. 不需要引用其它的庫烙肺,node.js自動封裝了一個2個對象用于哪芍恚快的輸出和請求 2. module.exports 模快的唯一出口桃笙,我們需要把氖系蹋快要輸出的東西放入該對象。 3. require() 加載模塊使用`require`方法搏明,該方法讀取一個文件并執(zhí)行鼠锈,返回文件內部的`module.exports`對象
//定義一個a.js文件 var name="hcc"; function printName(){ console.log(name) } module.exports={ printName:printName } //在b.js中引用a.js var b= require('./a') //接受a.js的exports的值 b.printName() //輸出hcc
瀏覽地址
代碼地址