AMD_CMD_RequireJS

為什么要使用模塊化?

  • 主要目的:
    1.解決命名沖突
    2.依賴管理
  • 其他價(jià)值:
    1.提高代碼可讀性
    2.代碼解耦铺根,提高復(fù)用性

CMD宪躯、AMD、CommonJS 規(guī)范分別指什么位迂?有哪些應(yīng)用

CommonJS 規(guī)范
  • CommonJS是服務(wù)器端模塊的規(guī)范访雪,Node.js采用了這個(gè)規(guī)范。Node.JS首先采用了js模塊化的概念掂林。
  1. 在一個(gè)模塊中臣缀,存在一個(gè)自由的變量”require”,它是一個(gè)函數(shù)泻帮。
    這個(gè)”require”函數(shù)接收一個(gè)模塊標(biāo)識符精置。
    “require”返回外部模塊所輸出的API。

2.在一個(gè)模塊中锣杂,會存在一個(gè)名為”exports”的自由變量脂倦,它是一個(gè)對象番宁,模塊可以在執(zhí)行的時(shí)候把自身的API加入到其中。

3.模塊必須使用”exports”對象來做為輸出的唯一表示赖阻。
演示:

//math.js
exports.add = function() {
    var sum = 0, i = 0, args = arguments, l = args.length;
    while (i < l) {
        sum += args[i++];
    }
    return sum;
};
//increment.js
var add = require('math').add;
exports.increment = function(val) {
    return add(val, 1);
};
//program.js
var inc = require('increment').increment;
var a = 1;
inc(a); 
// 2
AMD
  • AMD (Asynchronous Module Definition, 異步模塊定義) 指定一種機(jī)制蝶押,在該機(jī)制下模塊和依賴可以移步加載。這對瀏覽器端的異步加載尤其適用政供。

  • 語法

define(id?, dependencies?, factory);
  1. id: 定義中模塊的名字播聪,可選;如果沒有提供該參數(shù)布隔,模塊的名字應(yīng)該默認(rèn)為模塊加載器請求的指定腳本的名字.
  2. dependencies:是一個(gè)當(dāng)前模塊依賴的离陶,已被模塊定義的模塊標(biāo)識的數(shù)組字面量。 依賴參數(shù)是可選的衅檀,如果忽略此參數(shù)招刨,它應(yīng)該默認(rèn)為["require", "exports", "module"]。然而哀军,如果工廠方法的長度屬性小于3沉眶,加載器會選擇以函數(shù)的長度屬性指定的參數(shù)個(gè)數(shù)調(diào)用工廠方法。
  3. factory:工廠方法杉适,模塊初始化要執(zhí)行的函數(shù)或?qū)ο蠡丫蟆H绻麨楹瘮?shù),它應(yīng)該只被執(zhí)行一次猿推。如果是對象片习,此對象應(yīng)該為模塊的輸出值。
    示例:
define('modal', ['jQuery', 'dialog'], function($, Dialog){
    $('.modal').show();
    Dialog.open();
});
  • 實(shí)現(xiàn)AMD的庫有"RequireJS" "curl" 蹬叭、"Dojo" 等藕咏。
CMD
  • CMD(Common Module Definition)是在 Sea.js 中,所有 JavaScript 模塊都遵循的模塊定義規(guī)范秽五。該規(guī)范明確了模塊的基本書寫格式和基本交互規(guī)則孽查。
  • 格式:define(id?, deps?, factory),字符串 id 表示模塊標(biāo)識坦喘,數(shù)組 deps 是模塊依賴,此兩項(xiàng)是非必要的選項(xiàng)盲再。factory 可以是一個(gè)函數(shù),也可以是一個(gè)對象或字符串,factory 為對象瓣铣、字符串時(shí)洲胖,表示模塊的接口就是該對象、字符串坯沪。
//math.js
define(function(require, exports, module) {
  exports.add = function() {
    var sum = 0, i = 0, args = arguments, l = args.length;
    while (i < l) {
      sum += args[i++];
    }
    return sum;
  };
});

//increment.js
define(function(require, exports, module) {
  var add = require('math').add;
  exports.increment = function(val) {
    return add(val, 1);
  };
});

//program.js
define(function(require, exports, module) {
  var inc = require('increment').increment;
  var a = 1;
  inc(a); // 2

  module.id == "program";
});

使用 requirejs 完善入門任務(wù)15绿映,包括如下功能:

 1. 首屏大圖為全屏輪播
 2. 有回到頂部功能
 3. 圖片區(qū)使用瀑布流布局(圖片高度不一),下部有加載更多按鈕,點(diǎn)擊加載更多會加載更多數(shù)據(jù)(數(shù)據(jù)在后端 mock)
 4(可選).  使用 r.js 打包應(yīng)用
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末叉弦,一起剝皮案震驚了整個(gè)濱河市丐一,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌淹冰,老刑警劉巖库车,帶你破解...
    沈念sama閱讀 217,826評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異樱拴,居然都是意外死亡柠衍,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,968評論 3 395
  • 文/潘曉璐 我一進(jìn)店門晶乔,熙熙樓的掌柜王于貴愁眉苦臉地迎上來珍坊,“玉大人,你說我怎么就攤上這事正罢≌舐” “怎么了?”我有些...
    開封第一講書人閱讀 164,234評論 0 354
  • 文/不壞的土叔 我叫張陵翻具,是天一觀的道長履怯。 經(jīng)常有香客問我,道長裆泳,這世上最難降的妖魔是什么叹洲? 我笑而不...
    開封第一講書人閱讀 58,562評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮工禾,結(jié)果婚禮上运提,老公的妹妹穿的比我還像新娘。我一直安慰自己帜篇,他們只是感情好糙捺,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,611評論 6 392
  • 文/花漫 我一把揭開白布诫咱。 她就那樣靜靜地躺著笙隙,像睡著了一般坎缭。 火紅的嫁衣襯著肌膚如雪竟痰。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,482評論 1 302
  • 那天掏呼,我揣著相機(jī)與錄音坏快,去河邊找鬼。 笑死憎夷,一個(gè)胖子當(dāng)著我的面吹牛莽鸿,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 40,271評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼祥得,長吁一口氣:“原來是場噩夢啊……” “哼兔沃!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起级及,我...
    開封第一講書人閱讀 39,166評論 0 276
  • 序言:老撾萬榮一對情侶失蹤乒疏,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后饮焦,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體怕吴,經(jīng)...
    沈念sama閱讀 45,608評論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,814評論 3 336
  • 正文 我和宋清朗相戀三年县踢,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了转绷。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,926評論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡殿雪,死狀恐怖暇咆,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情丙曙,我是刑警寧澤爸业,帶...
    沈念sama閱讀 35,644評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站亏镰,受9級特大地震影響扯旷,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜索抓,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,249評論 3 329
  • 文/蒙蒙 一钧忽、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧逼肯,春花似錦耸黑、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,866評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至三椿,卻和暖如春缺菌,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背搜锰。 一陣腳步聲響...
    開封第一講書人閱讀 32,991評論 1 269
  • 我被黑心中介騙來泰國打工伴郁, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人蛋叼。 一個(gè)月前我還...
    沈念sama閱讀 48,063評論 3 370
  • 正文 我出身青樓焊傅,卻偏偏與公主長得像剂陡,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個(gè)殘疾皇子狐胎,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,871評論 2 354

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

  • 為什么要使用模塊化? 最主要的目的:解決命名沖突依賴管理 其他價(jià)值提高代碼可讀性代碼解耦镜粤,提高復(fù)用性 CMD捏题、AM...
    Eazer閱讀 661評論 3 1
  • 題目1: 為什么要使用模塊化? 最主要的目的:1.解決命名沖突2.依賴管理其他價(jià)值:1.提高代碼可讀性2.代碼解耦...
    saintkl閱讀 311評論 0 0
  • 為什么要使用模塊化肉渴? 1.解決命名沖突2.依賴管理3.提高代碼可讀性4.代碼解耦公荧,提高復(fù)用性 CMD、AMD同规、Co...
    小囧兔閱讀 258評論 0 0
  • 1. 為什么要使用模塊化循狰? 背景:如今CPU、瀏覽器性能得到了極大的提升券勺,很多頁面邏輯遷移到了客戶端(表單驗(yàn)證等)...
    _李祺閱讀 419評論 0 0
  • 今天绪钥,偶爾跟朋友談起選擇這個(gè)話題焰枢。是的瓶颠,人的一生中有無數(shù)次選擇。兒時(shí)舅逸,我們選擇哭泣與喜悅儒拂,不管結(jié)果是什么寸潦,我們都是...
    汪凌眉閱讀 209評論 0 1