前端模塊化

現(xiàn)在的網(wǎng)頁越來越復(fù)雜越來越接近桌面應(yīng)用,模塊化變得很普遍,但是es6正式支持的”類”和”模塊”需要很長(zhǎng)時(shí)間才能普及投入使用.

1.函數(shù)寫法

function Func(){
  //...
}

最原始的寫法,一個(gè)函數(shù)就是一個(gè)模塊,這種做法的缺點(diǎn)很明顯:”污染”了全局變量柒瓣,無法保證不與其他模塊發(fā)生變量名沖突,而且模塊成員之間看不出直接關(guān)系。

2.對(duì)象寫法

var data = {
    num : 0,
    Func : function ( {
              ...
     })
}

函數(shù) Func封裝在module1對(duì)象里一喘。使用的時(shí)候距糖,就是調(diào)用這個(gè)對(duì)象的屬性。

data.Func();

但是,這樣的寫法會(huì)暴露所有模塊成員挥萌,內(nèi)部狀態(tài)可以被外部改寫。比如枉侧,外部代碼可以直接改變內(nèi)部計(jì)數(shù)器的值引瀑。

data.num= 2;

3.立即執(zhí)行函數(shù)寫法

var data =(function() {
    num : 0,
    Func : function ( {
              ...
     })
}();

使用上面的寫法,外部代碼無法讀取內(nèi)部的num 變量,可以達(dá)到不暴露私有成員的目的,這就是js模塊的基本寫法.

4.放大寫法

var data = (function (f){
  f.m1 = function () {
    //...
  };
  return f;
})(window.f || {});

在瀏覽器環(huán)境中,模塊的各個(gè)部分通常都是從網(wǎng)上獲取的,有時(shí)無法知道哪個(gè)部分會(huì)先加載, window.f || {} 就是”立即執(zhí)行函數(shù)”的參數(shù)可以是空對(duì)象.

5.輸入全局變量

var data = (function ($, medth) {
  //...
})(jQuery, medth);

獨(dú)立性是模塊的重要特點(diǎn),模塊內(nèi)部最好不與程序的其他部分直接交互,
為了在模塊內(nèi)部調(diào)用全局變量,必須顯式地將其他變量輸入模塊。

6.模塊的規(guī)范

模塊化有一個(gè)前提,那就是大家必須以同樣的方式編寫模塊,否則就亂套了.
目前,通行的Javascript模塊規(guī)范共有兩種:CommonJS和AMD榨馁。
CommonJS :
在CommonJS中,有一個(gè)全局性方法require(),用于加載模塊,假定有一個(gè)數(shù)學(xué)模塊math.js,就可以像下面這樣加載憨栽。

var math = require('math');

然后,就可以調(diào)用模塊提供的方法:

var math = require('math');
math.add(2,3); // 5

AMD :
瀏覽器端的模塊,不能采用”同步加載”(synchronous),只能采用”異步加載”(asynchronous) . 因?yàn)?:

var math = require('math');
math.add(2, 3);

第二行math.add(2, 3),在第一行require(‘math’)之后運(yùn)行,因此必須等math.js加載完成,也就是說,如果加載時(shí)間很長(zhǎng),整個(gè)應(yīng)用就會(huì)停在那里等.
這對(duì)服務(wù)器端不是一個(gè)問題,因?yàn)樗械哪K都存放在本地硬盤,可以同步加載完成,等待時(shí)間就是硬盤的讀取時(shí)間翼虫。但是,對(duì)于瀏覽器,這卻是一個(gè)大問題,因?yàn)槟K都放在服務(wù)器端,等待時(shí)間取決于網(wǎng)速的快慢,可能要等很長(zhǎng)時(shí)間,瀏覽器處于”假死”狀態(tài).
AMD是”Asynchronous Module Definition”的縮寫,意思就是”異步模塊定義”屑柔。它采用異步方式加載模塊,模塊的加載不影響它后面語句的運(yùn)行。所有依賴這個(gè)模塊的語句,都定義在一個(gè)回調(diào)函數(shù)中蛙讥,等到加載完成之后锯蛀,這個(gè)回調(diào)函數(shù)才會(huì)運(yùn)行。
AMD也采用require()語句加載模塊,但是不同于CommonJS,它要求兩個(gè)參數(shù):

require([module], callback);

第一個(gè)參數(shù)[module],是一個(gè)數(shù)組次慢,里面的成員就是要加載的模塊,第二個(gè)參數(shù)callback,則是加載成功之后的回調(diào)函數(shù),如果將前面的代碼改寫成AMD形式,就是下面這樣:

require(['math'], function (math) {
  math.add(2, 3);
});

math.add()與math模塊加載不是同步的旁涤,瀏覽器不會(huì)發(fā)生假死翔曲。所以很顯然,AMD比較適合瀏覽器環(huán)境劈愚。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末瞳遍,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子菌羽,更是在濱河造成了極大的恐慌掠械,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,839評(píng)論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件注祖,死亡現(xiàn)場(chǎng)離奇詭異猾蒂,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)是晨,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,543評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門肚菠,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人罩缴,你說我怎么就攤上這事蚊逢。” “怎么了箫章?”我有些...
    開封第一講書人閱讀 153,116評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵烙荷,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我檬寂,道長(zhǎng)终抽,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,371評(píng)論 1 279
  • 正文 為了忘掉前任焰薄,我火速辦了婚禮拿诸,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘塞茅。我一直安慰自己,他們只是感情好季率,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,384評(píng)論 5 374
  • 文/花漫 我一把揭開白布野瘦。 她就那樣靜靜地躺著,像睡著了一般飒泻。 火紅的嫁衣襯著肌膚如雪鞭光。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,111評(píng)論 1 285
  • 那天泞遗,我揣著相機(jī)與錄音惰许,去河邊找鬼。 笑死史辙,一個(gè)胖子當(dāng)著我的面吹牛汹买,可吹牛的內(nèi)容都是我干的佩伤。 我是一名探鬼主播,決...
    沈念sama閱讀 38,416評(píng)論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼晦毙,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼生巡!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起见妒,我...
    開封第一講書人閱讀 37,053評(píng)論 0 259
  • 序言:老撾萬榮一對(duì)情侶失蹤孤荣,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后须揣,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體盐股,經(jīng)...
    沈念sama閱讀 43,558評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,007評(píng)論 2 325
  • 正文 我和宋清朗相戀三年耻卡,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了遂庄。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,117評(píng)論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡劲赠,死狀恐怖涛目,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情凛澎,我是刑警寧澤霹肝,帶...
    沈念sama閱讀 33,756評(píng)論 4 324
  • 正文 年R本政府宣布,位于F島的核電站塑煎,受9級(jí)特大地震影響沫换,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜最铁,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,324評(píng)論 3 307
  • 文/蒙蒙 一讯赏、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧冷尉,春花似錦漱挎、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,315評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至雾棺,卻和暖如春膊夹,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背捌浩。 一陣腳步聲響...
    開封第一講書人閱讀 31,539評(píng)論 1 262
  • 我被黑心中介騙來泰國(guó)打工放刨, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人尸饺。 一個(gè)月前我還...
    沈念sama閱讀 45,578評(píng)論 2 355
  • 正文 我出身青樓进统,卻偏偏與公主長(zhǎng)得像助币,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子麻昼,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,877評(píng)論 2 345

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

  • 轉(zhuǎn)載于作者:linwalker via:http://www.reibang.com/p/d67bc79976e6...
    猩崽大叔閱讀 666評(píng)論 0 0
  • 前端模塊規(guī)范有三種:CommonJs,AMD和CMD奠支。CommonJs用在服務(wù)器端,AMD和CMD用在瀏覽器環(huán)境A...
    linwalker閱讀 41,091評(píng)論 6 130
  • 在JavaScript發(fā)展初期就是為了實(shí)現(xiàn)簡(jiǎn)單的頁面交互邏輯抚芦,寥寥數(shù)語即可倍谜;如今CPU、瀏覽器性能得到了極大的提升...
    簡(jiǎn)不簡(jiǎn)單_都好閱讀 219評(píng)論 0 0
  • 前端模塊化 在JavaScript發(fā)展初期就是為了實(shí)現(xiàn)簡(jiǎn)單的頁面交互邏輯叉抡,寥寥數(shù)語即可尔崔;如今CPU、瀏覽器性能得到...
    景岳閱讀 240評(píng)論 2 4
  • 在JavaScript發(fā)展初期就是為了實(shí)現(xiàn)簡(jiǎn)單的頁面交互邏輯褥民,寥寥數(shù)語即可季春;如今CPU、瀏覽器性能得到了極大的提升...
    mhy_web閱讀 220評(píng)論 0 0