高級4-AMD_CMD_RequireJS

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

    答:

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

    • AMD:
      是”Asynchronous Module Definition”的縮寫,意思就是”異步模塊定義”。采用異步方式加載模塊,模塊的加載不影響它后面語句的運行。所有依賴這個模塊的語句,都定義在一個回調函數中,等到加載完成之后,這個回調函數才會運行。
      語法:define(id, dependences, factory);

    • CommonJS:用于服務器端模塊化,有一個全局性方法require(),用于加載模塊。
      語法:

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

    * CMD:CMD(Common Module Definition)是 SeaJS推廣過程中產生的。和AMD不同的是,它并不是異步加載,而是松散加載,只有當需要加載模塊的時候,再用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
// 加載模塊設置
requirejs.config({
baseUrl: 'js/libs',                 // 指明模塊的默認路徑
paths: {
'jquery': 'jquery.min',           // 每個模塊都是JS文件,即HTTP請求多
'underscore': 'underscore.min',   // 可以用require.js的優化工具合并模塊
'backbone': 'backbone.min',
'jquery.scroll': 'jquery.scroll.min'
'xxx': 'https://xxx.com/libs/xxx/1.7.2/xxx.min'
}
shim: {                             // 為非規范的模塊定義特征,接受配置對象
'underscore': {
 exports: '_'                    // exports為外部調用模塊時所用的名稱
},
'backbone': {
 deps: ['underscore', 'jquery'], // deps數組表明模塊的依賴性
 exports: 'Backbone'
},
'jquery.scroll': {
 deps: ['jquery'],
 exports: 'jQuery.fn.scroll'
}
}
});
// 加載AMD模塊,并用回調函數操作
requirejs(['jquery', 'underscore', 'backbone'], function($, _, Backbone) {
//...
});
// 寫AMD模塊
// 1. 不依賴其他模塊,例如:math.js
define(function() {
var add = function(x, y) {
return x + y;
};
return {
add: add
};
});
// 2. 依賴其他模塊,需指明依賴數組
define(['mylib'], function(mylib) {
function foo() {
mylib.doSomething();
}
return {
foo: foo
};
});
// require.js提供了一些插件
//1. domready插件,回調函數在頁面DOM結構加載完成時運行
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文件
  • 應用

    創建html文件,引入require.js庫,設置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文件夾,創建main.js:

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

創建starting.js:

   ```

//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;
});
  • 題目3: 使用 requirejs 完善入門任務15,包括如下功能:
1. 首屏大圖為全屏輪播
2. 有回到頂部功能
3. 圖片區使用瀑布流布局(圖片高度不一),下部有加載更多按鈕,點擊加載更多會加載更多數據(數據在后端 mock)
4. 使用 r.js 打包應用

預覽地址

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,739評論 6 534
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,634評論 3 419
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 176,653評論 0 377
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,063評論 1 314
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,835評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,235評論 1 324
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,315評論 3 442
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,459評論 0 289
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,000評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,819評論 3 355
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,004評論 1 370
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,560評論 5 362
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,257評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,676評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,937評論 1 288
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,717評論 3 393
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,003評論 2 374

推薦閱讀更多精彩內容

  • 1: 為什么要使用模塊化? 解決命名沖突 依賴管理 提高代碼可讀性 代碼解耦,提高復用性 2: AMD、Commo...
    曉風殘月1994閱讀 269評論 0 0
  • 1: 為什么要使用模塊化? 1.解決命名沖突2.可進行依賴管理3.增強代碼的可讀性4.代碼解耦,提高代碼的復用率 ...
    高進哥哥閱讀 273評論 0 0
  • 題目1: 為什么要使用模塊化? 解決命名沖突; 可進行依賴管理; 增強代碼的可讀性; 代碼解耦,提高代碼的復用率;...
    漂于行閱讀 397評論 0 0
  • 題目1: 為什么要使用模塊化? 可以避免命名沖突 對文件的依賴項進行統一管理 提高代碼的可讀性和維護性 提高頁面的...
    饑人谷_嚴琰閱讀 253評論 0 0
  • 課程任務 題目1: 為什么要使用模塊化? 模塊化的作用有以下這些: 可以解決命名沖突 管理依賴 提高代碼的可讀性 ...
    ReedSun_QD閱讀 433評論 0 0