模塊化

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

  1. 解決命名沖突
  2. 依賴管理
  3. 提高代碼可讀性
  4. 代碼解耦持际,提高復用性

題目2: CMD沃琅、AMD、CommonJS 規(guī)范分別指什么蜘欲?有哪些應用

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

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

    require(dependences) // 加載依賴模塊
    exports.factory = function(){ // ...};  // 使用”exports”對象來做為輸出的唯一表示涡尘。
    
  • CMD:
    CMD(Common Module Definition)是 SeaJS推廣過程中產生的忍弛。和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:

    // 加載模塊設置
    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為外部調用模塊時所用的名稱
      },
      '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文件
    
  • 實例

    ?

    創(chuàng)建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>
    

    在html目錄下新建js文件夾,創(chuàng)建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. 圖片區(qū)使用瀑布流布局(圖片高度不一)扑毡,下部有加載更多按鈕,點擊加載更多會加載更多數據(數據在后端 mock)
 4.  使用 r.js 打包應用

演示

代碼

![rJS.png](http://upload-images.jianshu.io/upload_images/3778624-d9a0babaa1f40071.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末盛险,一起剝皮案震驚了整個濱河市瞄摊,隨后出現的幾起案子,更是在濱河造成了極大的恐慌苦掘,老刑警劉巖换帜,帶你破解...
    沈念sama閱讀 211,194評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現場離奇詭異鹤啡,居然都是意外死亡惯驼,警方通過查閱死者的電腦和手機,發(fā)現死者居然都...
    沈念sama閱讀 90,058評論 2 385
  • 文/潘曉璐 我一進店門递瑰,熙熙樓的掌柜王于貴愁眉苦臉地迎上來祟牲,“玉大人,你說我怎么就攤上這事抖部∷当矗” “怎么了?”我有些...
    開封第一講書人閱讀 156,780評論 0 346
  • 文/不壞的土叔 我叫張陵慎颗,是天一觀的道長狂丝。 經常有香客問我,道長哗总,這世上最難降的妖魔是什么几颜? 我笑而不...
    開封第一講書人閱讀 56,388評論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮讯屈,結果婚禮上蛋哭,老公的妹妹穿的比我還像新娘。我一直安慰自己涮母,他們只是感情好谆趾,可當我...
    茶點故事閱讀 65,430評論 5 384
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著叛本,像睡著了一般沪蓬。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上来候,一...
    開封第一講書人閱讀 49,764評論 1 290
  • 那天跷叉,我揣著相機與錄音,去河邊找鬼。 笑死云挟,一個胖子當著我的面吹牛梆砸,可吹牛的內容都是我干的。 我是一名探鬼主播园欣,決...
    沈念sama閱讀 38,907評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼帖世,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了沸枯?” 一聲冷哼從身側響起日矫,我...
    開封第一講書人閱讀 37,679評論 0 266
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎绑榴,沒想到半個月后搬男,有當地人在樹林里發(fā)現了一具尸體,經...
    沈念sama閱讀 44,122評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡彭沼,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 36,459評論 2 325
  • 正文 我和宋清朗相戀三年缔逛,在試婚紗的時候發(fā)現自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片姓惑。...
    茶點故事閱讀 38,605評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡褐奴,死狀恐怖,靈堂內的尸體忽然破棺而出于毙,到底是詐尸還是另有隱情敦冬,我是刑警寧澤,帶...
    沈念sama閱讀 34,270評論 4 329
  • 正文 年R本政府宣布唯沮,位于F島的核電站脖旱,受9級特大地震影響,放射性物質發(fā)生泄漏介蛉。R本人自食惡果不足惜萌庆,卻給世界環(huán)境...
    茶點故事閱讀 39,867評論 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望币旧。 院中可真熱鬧践险,春花似錦、人聲如沸吹菱。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,734評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽鳍刷。三九已至占遥,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間输瓜,已是汗流浹背瓦胎。 一陣腳步聲響...
    開封第一講書人閱讀 31,961評論 1 265
  • 我被黑心中介騙來泰國打工芬萍, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人凛捏。 一個月前我還...
    沈念sama閱讀 46,297評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像芹缔,于是被迫代替她去往敵國和親坯癣。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 43,472評論 2 348

推薦閱讀更多精彩內容