前端模塊化

模塊化主要是體現(xiàn)一種分而治之的思想,分而治之是軟件工程的重要思想虫给,是復(fù)雜系統(tǒng)開(kāi)發(fā)和維護(hù)的基石。模塊化則是前端最流行的分治手段咏窿。分而治之:將一個(gè)大問(wèn)題分解成多個(gè)較為獨(dú)立的與原問(wèn)題性質(zhì)相同的小問(wèn)題砖第,將所有的小問(wèn)題的解答組合起來(lái)即可得到大問(wèn)題的答案。

模塊化開(kāi)發(fā)的4點(diǎn)好處:

  1 避免變量污染环凿,命名沖突

  2 提高代碼復(fù)用率 

  3 提高維護(hù)性 

  4 依賴關(guān)系的管理

前端模塊化規(guī)范從原始野蠻階段現(xiàn)在慢慢進(jìn)入“文藝復(fù)興”時(shí)代梧兼,實(shí)現(xiàn)的過(guò)程如下:

一 函數(shù)封裝 : 在一個(gè)函數(shù)里面編寫(xiě)幾個(gè)函數(shù)是最開(kāi)始的模塊。

缺點(diǎn):缺點(diǎn)很明顯智听,污染了全局變量羽杰,并且不能保證和其他模塊起沖突渡紫,模塊成員看起來(lái)似乎沒(méi)啥關(guān)系

二 對(duì)象 為了解決這個(gè)問(wèn)題,有了新方法考赛,將所有模塊成員封裝在一個(gè)對(duì)象中

            var module = new Object({

                   _count:0,

              m1:function (){  ```  },

              m2:function (){  ```  }               

             })

這樣 兩個(gè)函數(shù)就被包在這個(gè)對(duì)象中惕澎,當(dāng)我們要使用的時(shí)候,就是調(diào)用這個(gè)對(duì)象的屬性

            module.m1()

缺點(diǎn): 這樣寫(xiě)法會(huì)暴露全部的成員颜骤,內(nèi)部狀態(tài)可以被外部改變唧喉,比如外部代碼可直接改變計(jì)數(shù)器的值

             //壞人的操作

            module._count = 10;

最后的最后,聰明的人類找到了究極新的方法——立即執(zhí)行函數(shù)忍抽,這樣就可以達(dá)到不暴露私有成員的目的

            var module = (function (){

            var _count = 5;

            var m1 = function (){  ```  };

            var m2 = function (){  ```  };

            return{

            m1:m1,

            m2:m2

            }

            })()

以上就是模塊化開(kāi)發(fā)的基礎(chǔ)中的基礎(chǔ)八孝,以后會(huì)說(shuō)道其他更深層次的模塊化開(kāi)發(fā)。

接下來(lái)了解一下兩種模塊化規(guī)范鸠项。

commonJS

commonJS由nodeJS發(fā)揚(yáng)光大干跛,這標(biāo)志著js模塊化正式登場(chǎng)。

一 定義模塊

根據(jù)commonJS規(guī)范祟绊,一個(gè)單獨(dú)的文件是一個(gè)模塊楼入,每一個(gè)模塊都是一個(gè)單獨(dú)的作用域,也就是說(shuō)牧抽,在該模塊內(nèi)部定義的變量嘉熊,無(wú)法被其他模塊讀取,除非為global對(duì)象的屬性阎姥。

二 模塊輸出

模塊只有一個(gè)出口记舆,module.exports對(duì)象,我們需要把模塊希望輸出的內(nèi)容放入該對(duì)象呼巴。

三 加載模塊

加載模塊用require方法泽腮,該方法讀取一個(gè)文件并且執(zhí)行,返回文件內(nèi)部的module.exports對(duì)象衣赶。

模塊輸出:

var name = 'Byron'; 

function printName(){ 

console.log(name); 

} 

module.exports = { 

printName: printName, 

}

可以簡(jiǎn)寫(xiě)為:

module.exports = { 

printName

}

然后加載模塊

var nameModule = require('./myModel.js');

nameModule.printName();

ES6模塊化

export default與export const的區(qū)別

  一 export 用于在JavaScript模塊中導(dǎo)出函數(shù)诊赊,原始值,對(duì)象府瞄;即導(dǎo)出模塊碧磅,例如:

  export (命名導(dǎo)出)

  export {myFunction};  //命名導(dǎo)出函數(shù)

  export const value=5;   //命名導(dǎo)出原始值

  export {object1, object2, ....};   //命名導(dǎo)出對(duì)象

命名導(dǎo)出可以導(dǎo)出多個(gè)值,但是導(dǎo)入時(shí)命名需要與導(dǎo)出命名相同遵馆。

每個(gè)文件可以有多個(gè)命名導(dǎo)出 export const鲸郊,然后將你要導(dǎo)入的名稱用{}(花括號(hào))包住。

  導(dǎo)出: export const num = 888

  導(dǎo)入: import { num } from '模塊路徑'

1 導(dǎo)入內(nèi)容的時(shí)候,需要添加 {}

2 導(dǎo)入的內(nèi)容(num),必須是模塊導(dǎo)出的內(nèi)容(num).如果導(dǎo)入內(nèi)容與導(dǎo)出內(nèi)容不相同,那么,導(dǎo)入內(nèi)容為: undefined

3 export 不帶 default 可以出現(xiàn)任意多次

  二 export default(默認(rèn)導(dǎo)出)

  只能有一個(gè)默認(rèn)導(dǎo)出货邓;導(dǎo)入此類文件(模塊)時(shí)需要指定一個(gè)任何你喜歡的名稱即可秆撮。

  導(dǎo)出:export default 要導(dǎo)出的內(nèi)容

  導(dǎo)入:import a from '模塊路徑'

1 使用 export default 導(dǎo)出的內(nèi)容,在導(dǎo)入的時(shí)候换况,import后面的名稱可以是任意的

2 在一個(gè)模塊中 export default 語(yǔ)法只能使用一次

  給導(dǎo)入的變量起別名(解決命名沖突)

  import { num as bNum } from '模塊名稱'

  一次性全部導(dǎo)入一個(gè)模塊中的內(nèi)容

  import * as bModule from '模塊名稱'
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末职辨,一起剝皮案震驚了整個(gè)濱河市盗蟆,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌舒裤,老刑警劉巖喳资,帶你破解...
    沈念sama閱讀 221,635評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異腾供,居然都是意外死亡仆邓,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,543評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門(mén)台腥,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)宏赘,“玉大人,你說(shuō)我怎么就攤上這事黎侈〔焓穑” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 168,083評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵峻汉,是天一觀的道長(zhǎng)贴汪。 經(jīng)常有香客問(wèn)我,道長(zhǎng)休吠,這世上最難降的妖魔是什么扳埂? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 59,640評(píng)論 1 296
  • 正文 為了忘掉前任,我火速辦了婚禮瘤礁,結(jié)果婚禮上阳懂,老公的妹妹穿的比我還像新娘。我一直安慰自己柜思,他們只是感情好岩调,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,640評(píng)論 6 397
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著赡盘,像睡著了一般号枕。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上陨享,一...
    開(kāi)封第一講書(shū)人閱讀 52,262評(píng)論 1 308
  • 那天葱淳,我揣著相機(jī)與錄音,去河邊找鬼抛姑。 笑死赞厕,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的定硝。 我是一名探鬼主播坑傅,決...
    沈念sama閱讀 40,833評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼喷斋!你這毒婦竟也來(lái)了唁毒?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 39,736評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤星爪,失蹤者是張志新(化名)和其女友劉穎浆西,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體顽腾,經(jīng)...
    沈念sama閱讀 46,280評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡近零,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,369評(píng)論 3 340
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了抄肖。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片久信。...
    茶點(diǎn)故事閱讀 40,503評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖漓摩,靈堂內(nèi)的尸體忽然破棺而出裙士,到底是詐尸還是另有隱情,我是刑警寧澤管毙,帶...
    沈念sama閱讀 36,185評(píng)論 5 350
  • 正文 年R本政府宣布腿椎,位于F島的核電站,受9級(jí)特大地震影響夭咬,放射性物質(zhì)發(fā)生泄漏啃炸。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,870評(píng)論 3 333
  • 文/蒙蒙 一卓舵、第九天 我趴在偏房一處隱蔽的房頂上張望南用。 院中可真熱鬧,春花似錦掏湾、人聲如沸裹虫。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,340評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)恒界。三九已至,卻和暖如春砚嘴,著一層夾襖步出監(jiān)牢的瞬間十酣,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,460評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工际长, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留耸采,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,909評(píng)論 3 376
  • 正文 我出身青樓工育,卻偏偏與公主長(zhǎng)得像虾宇,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子如绸,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,512評(píng)論 2 359