AMD_CMD_RequireJS

1: 為什么要使用模塊化?

1.解決命名沖突
2.可進行依賴管理
3.增強代碼的可讀性
4.代碼解耦,提高代碼的復用率

2: CMD、AMD吧凉、CommonJS 規(guī)范分別指什么?有哪些應(yīng)用

  • AMD:
    是”Asynchronous Module Definition”的縮寫踏志,意思就是”異步模塊定義”阀捅。采用異步方式加載模塊,模塊的加載不影響它后面語句的運行针余。所有依賴這個模塊的語句饲鄙,都定義在一個回調(diào)函數(shù)中,等到加載完成之后圆雁,這個回調(diào)函數(shù)才會運行忍级。
    語法:define(id, dependences, factory);
  • CommonJS:
    用于服務(wù)器端模塊化,有一個全局性方法require()伪朽,用于加載模塊轴咱。
    語法:
require(dependences) // 加載依賴模塊
exports.factory = function(){ // ...};  // 使用”exports”對象來做為輸出的唯一表示。
  • CMD:
    CMD(Common Module Definition)是 SeaJS推廣過程中產(chǎn)生的烈涮。和AMD不同的是朴肺,它并不是異步加載,而是松散加載坚洽,只有當需要加載模塊的時候戈稿,再用require方法引用模塊。
    語法:define(factory);
// CMD
// math.js 
define(function(requires, exports, module) {
exports.add = function(x, y) {
return x + y;
};
});
// inc.js
define(function(requires, exports, module) {
var add = require('math').add;
exports.inc = function(val) {
return add(val, 1);
};
});
// program.js
define(function(require, exports, module) {
var inc = require('inc').inc;
var a = 1;
inc(a); // 2
module.id = "program";
});
  • require.js:
// 加載模塊設(shè)置
requirejs.config({
baseUrl: 'js/libs',                 // 指明模塊的默認路徑
paths: {
  'jquery': 'jquery.min',           // 每個模塊都是JS文件讶舰,即HTTP請求多
  'underscore': 'underscore.min',   // 可以用require.js的優(yōu)化工具合并模塊
  'backbone': 'backbone.min',
  'jquery.scroll': 'jquery.scroll.min'
  'xxx': 'https://xxx.com/libs/xxx/1.7.2/xxx.min'
}
shim: {                             // 為非規(guī)范的模塊定義特征鞍盗,接受配置對象
  'underscore': {
    exports: '_'                    // exports為外部調(diào)用模塊時所用的名稱
  },
  'backbone': {
    deps: ['underscore', 'jquery'], // deps數(shù)組表明模塊的依賴性
    exports: 'Backbone'
  },
  'jquery.scroll': {
    deps: ['jquery'],
    exports: 'jQuery.fn.scroll'
  }
}
});
// 加載AMD模塊,并用回調(diào)函數(shù)操作
requirejs(['jquery', 'underscore', 'backbone'], function($, _, Backbone) {
//...
});
// 寫AMD模塊
// 1. 不依賴其他模塊跳昼,例如:math.js
define(function() {
var add = function(x, y) {
  return x + y;
};
return {
  add: add
};
});
// 2. 依賴其他模塊般甲,需指明依賴數(shù)組
define(['mylib'], function(mylib) {
function foo() {
  mylib.doSomething();
}
return {
  foo: foo
};
});
// require.js提供了一些插件
//1. domready插件,回調(diào)函數(shù)在頁面DOM結(jié)構(gòu)加載完成時運行
require(['domready!'], function(doc) {
//...
});
//2. text和image插件庐舟,允許require.js加載文件和圖片文件
define(['text!review.txt', 'image!dog.jpg'], function(review, dog) {
console.log(review);
document.body.appendChild(dog);
});
// 3. 類似的插件還有json和mdown欣除,加載json文件和markdown文件
  • 實例
    創(chuàng)建html文件,引入require.js庫挪略,設(shè)置data-main屬性:
<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8">
  <title></title>
</head>
<body>
  <script src="http://apps.bdimg.com/libs/require.js/2.1.11/require.min.js" data-main="main"></script>
</body>
</html>

// main.js

require(['starting']);
console.log("starting");

//starting.js

define(['inc'],function(inc){
 console.log(inc.getRes());
 inc.add1();
 console.log(inc.getRes());
 inc.add1();
 console.log(inc.getRes());
});

inc.js:

// inc.js
define(function() {
var a = 0;
var inc = {
  add1: function() {
    return a++;
  },
  getRes: function() {
    return a;
  }
};
return inc;
});
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末历帚,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子杠娱,更是在濱河造成了極大的恐慌挽牢,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,755評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件摊求,死亡現(xiàn)場離奇詭異禽拔,居然都是意外死亡,警方通過查閱死者的電腦和手機室叉,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,305評論 3 395
  • 文/潘曉璐 我一進店門睹栖,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人茧痕,你說我怎么就攤上這事野来。” “怎么了踪旷?”我有些...
    開封第一講書人閱讀 165,138評論 0 355
  • 文/不壞的土叔 我叫張陵曼氛,是天一觀的道長。 經(jīng)常有香客問我令野,道長舀患,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,791評論 1 295
  • 正文 為了忘掉前任气破,我火速辦了婚禮聊浅,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘现使。我一直安慰自己低匙,他們只是感情好,可當我...
    茶點故事閱讀 67,794評論 6 392
  • 文/花漫 我一把揭開白布朴下。 她就那樣靜靜地躺著努咐,像睡著了一般。 火紅的嫁衣襯著肌膚如雪殴胧。 梳的紋絲不亂的頭發(fā)上渗稍,一...
    開封第一講書人閱讀 51,631評論 1 305
  • 那天,我揣著相機與錄音团滥,去河邊找鬼竿屹。 笑死,一個胖子當著我的面吹牛灸姊,可吹牛的內(nèi)容都是我干的拱燃。 我是一名探鬼主播,決...
    沈念sama閱讀 40,362評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼力惯,長吁一口氣:“原來是場噩夢啊……” “哼碗誉!你這毒婦竟也來了召嘶?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,264評論 0 276
  • 序言:老撾萬榮一對情侶失蹤哮缺,失蹤者是張志新(化名)和其女友劉穎弄跌,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體尝苇,經(jīng)...
    沈念sama閱讀 45,724評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡铛只,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,900評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了糠溜。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片淳玩。...
    茶點故事閱讀 40,040評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖非竿,靈堂內(nèi)的尸體忽然破棺而出蜕着,到底是詐尸還是另有隱情,我是刑警寧澤汽馋,帶...
    沈念sama閱讀 35,742評論 5 346
  • 正文 年R本政府宣布侮东,位于F島的核電站,受9級特大地震影響豹芯,放射性物質(zhì)發(fā)生泄漏悄雅。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,364評論 3 330
  • 文/蒙蒙 一铁蹈、第九天 我趴在偏房一處隱蔽的房頂上張望宽闲。 院中可真熱鬧,春花似錦握牧、人聲如沸容诬。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,944評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽览徒。三九已至,卻和暖如春颂龙,著一層夾襖步出監(jiān)牢的瞬間习蓬,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,060評論 1 270
  • 我被黑心中介騙來泰國打工措嵌, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留躲叼,地道東北人。 一個月前我還...
    沈念sama閱讀 48,247評論 3 371
  • 正文 我出身青樓企巢,卻偏偏與公主長得像枫慷,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,979評論 2 355

推薦閱讀更多精彩內(nèi)容

  • 題目1: 為什么要使用模塊化或听?答:解決命名沖突依賴管理提高代碼可讀性代碼解耦探孝,提高復用性 題目2: CMD、AMD...
    饑人谷_桶飯閱讀 255評論 0 1
  • 題目1: 為什么要使用模塊化神帅? 解決命名沖突再姑; 可進行依賴管理萌抵; 增強代碼的可讀性找御; 代碼解耦,提高代碼的復用率绍填;...
    漂于行閱讀 396評論 0 0
  • 為什么要使用模塊化? 最主要的目的:解決命名沖突依賴管理 其他價值提高代碼可讀性代碼解耦卿闹,提高復用性 CMD揭糕、AM...
    Eazer閱讀 663評論 3 1
  • 1. 為什么要使用模塊化? 背景:如今CPU锻霎、瀏覽器性能得到了極大的提升著角,很多頁面邏輯遷移到了客戶端(表單驗證等)...
    _李祺閱讀 419評論 0 0
  • 感覺如何與陌生人搭訕,是個偽命題旋恼,因為所有熟悉的人都是重陌生人開始認識的吏口。 我們的同學、同志冰更、朋友产徊、鄰人等...
    淡雪飛花閱讀 457評論 0 1