高級(jí)4-AMD_CMD_RequireJS

  • 題目1: 為什么要使用模塊化嵌言?

    答:

    1. 解決命名沖突
    2. 依賴管理
    3. 提高代碼可讀性
    4. 代碼解耦,提高復(fù)用性
  • 題目2: CMD、AMD侥蒙、CommonJS 規(guī)范分別指什么?有哪些應(yīng)用
    答:

    • AMD:
      是”Asynchronous Module Definition”的縮寫匀奏,意思就是”異步模塊定義”鞭衩。采用異步方式加載模塊,模塊的加載不影響它后面語句的運(yùn)行娃善。所有依賴這個(gè)模塊的語句论衍,都定義在一個(gè)回調(diào)函數(shù)中,等到加載完成之后聚磺,這個(gè)回調(diào)函數(shù)才會(huì)運(yùn)行坯台。
      語法:define(id, dependences, factory);

    • CommonJS:用于服務(wù)器端模塊化,有一個(gè)全局性方法require()瘫寝,用于加載模塊蜒蕾。
      語法:

require(dependences) // 加載依賴模塊
exports.factory = function(){ // ...}; // 使用”exports”對(duì)象來做為輸出的唯一表示。

    * CMD:CMD(Common Module Definition)是 SeaJS推廣過程中產(chǎn)生的焕阿。和AMD不同的是咪啡,它并不是異步加載,而是松散加載暮屡,只有當(dāng)需要加載模塊的時(shí)候瑟匆,再用require方法引用模塊。

        ```
// 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',                 // 指明模塊的默認(rèn)路徑
paths: {
'jquery': 'jquery.min',           // 每個(gè)模塊都是JS文件栽惶,即HTTP請(qǐng)求多
'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ī)范的模塊定義特征愁溜,接受配置對(duì)象
'underscore': {
 exports: '_'                    // exports為外部調(diào)用模塊時(shí)所用的名稱
},
'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)加載完成時(shí)運(yùn)行
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文件
  • 應(yīng)用

    創(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>

在根目錄下新建js文件夾墓律,創(chuàng)建main.js:

       ```
// main.js
require(['starting']);
console.log("starting");

創(chuàng)建starting.js:

   ```

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

創(chuàng)建inc.js:
        
       ```
// inc.js
define(function() {
var a = 0;
var inc = {
  add1: function() {
    return a++;
  },
  getRes: function() {
    return a;
  }
};
return inc;
});
  • 題目3: 使用 requirejs 完善入門任務(wù)15膀估,包括如下功能:
1. 首屏大圖為全屏輪播
2. 有回到頂部功能
3. 圖片區(qū)使用瀑布流布局(圖片高度不一),下部有加載更多按鈕耻讽,點(diǎn)擊加載更多會(huì)加載更多數(shù)據(jù)(數(shù)據(jù)在后端 mock)
4. 使用 r.js 打包應(yīng)用

預(yù)覽地址

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末察纯,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子针肥,更是在濱河造成了極大的恐慌饼记,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,682評(píng)論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件慰枕,死亡現(xiàn)場(chǎng)離奇詭異具则,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)具帮,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,277評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門博肋,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人蜂厅,你說我怎么就攤上這事束昵。” “怎么了葛峻?”我有些...
    開封第一講書人閱讀 165,083評(píng)論 0 355
  • 文/不壞的土叔 我叫張陵锹雏,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我术奖,道長(zhǎng)礁遵,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,763評(píng)論 1 295
  • 正文 為了忘掉前任采记,我火速辦了婚禮佣耐,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘唧龄。我一直安慰自己兼砖,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,785評(píng)論 6 392
  • 文/花漫 我一把揭開白布既棺。 她就那樣靜靜地躺著讽挟,像睡著了一般。 火紅的嫁衣襯著肌膚如雪丸冕。 梳的紋絲不亂的頭發(fā)上耽梅,一...
    開封第一講書人閱讀 51,624評(píng)論 1 305
  • 那天,我揣著相機(jī)與錄音胖烛,去河邊找鬼眼姐。 笑死诅迷,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的众旗。 我是一名探鬼主播罢杉,決...
    沈念sama閱讀 40,358評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼贡歧!你這毒婦竟也來了滩租?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,261評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤艘款,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后沃琅,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體哗咆,經(jīng)...
    沈念sama閱讀 45,722評(píng)論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,900評(píng)論 3 336
  • 正文 我和宋清朗相戀三年益眉,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了晌柬。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,030評(píng)論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡郭脂,死狀恐怖年碘,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情展鸡,我是刑警寧澤屿衅,帶...
    沈念sama閱讀 35,737評(píng)論 5 346
  • 正文 年R本政府宣布,位于F島的核電站莹弊,受9級(jí)特大地震影響涤久,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜忍弛,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,360評(píng)論 3 330
  • 文/蒙蒙 一响迂、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧细疚,春花似錦蔗彤、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,941評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至吧彪,卻和暖如春啦鸣,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背来氧。 一陣腳步聲響...
    開封第一講書人閱讀 33,057評(píng)論 1 270
  • 我被黑心中介騙來泰國(guó)打工诫给, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留香拉,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,237評(píng)論 3 371
  • 正文 我出身青樓中狂,卻偏偏與公主長(zhǎng)得像凫碌,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子胃榕,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,976評(píng)論 2 355

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

  • 1: 為什么要使用模塊化盛险? 解決命名沖突 依賴管理 提高代碼可讀性 代碼解耦,提高復(fù)用性 2: AMD勋又、Commo...
    曉風(fēng)殘?jiān)?994閱讀 263評(píng)論 0 0
  • 1: 為什么要使用模塊化苦掘? 1.解決命名沖突2.可進(jìn)行依賴管理3.增強(qiáng)代碼的可讀性4.代碼解耦,提高代碼的復(fù)用率 ...
    高進(jìn)哥哥閱讀 271評(píng)論 0 0
  • 題目1: 為什么要使用模塊化楔壤? 解決命名沖突鹤啡; 可進(jìn)行依賴管理; 增強(qiáng)代碼的可讀性蹲嚣; 代碼解耦递瑰,提高代碼的復(fù)用率;...
    漂于行閱讀 396評(píng)論 0 0
  • 題目1: 為什么要使用模塊化隙畜? 可以避免命名沖突 對(duì)文件的依賴項(xiàng)進(jìn)行統(tǒng)一管理 提高代碼的可讀性和維護(hù)性 提高頁面的...
    饑人谷_嚴(yán)琰閱讀 247評(píng)論 0 0
  • 課程任務(wù) 題目1: 為什么要使用模塊化抖部? 模塊化的作用有以下這些: 可以解決命名沖突 管理依賴 提高代碼的可讀性 ...
    ReedSun_QD閱讀 428評(píng)論 0 0