前端模塊化(一):動(dòng)機(jī)

起因

在JavaScript發(fā)展初期就是為了實(shí)現(xiàn)簡單的頁面交互邏輯,寥寥數(shù)語即可;如今CPU荣回、瀏覽器性能得到了極大的提升,很多頁面邏輯遷移到了客戶端(表單驗(yàn)證等)叠赦,隨著web2.0時(shí)代的到來驹马,Ajax技術(shù)得到廣泛應(yīng)用革砸,jQuery等前端庫層出不窮除秀,前端代碼日益膨脹

這時(shí)候JavaScript作為嵌入式的腳本語言的定位動(dòng)搖了,JavaScript卻沒有為組織代碼提供任何明顯幫助算利,甚至沒有類的概念册踩,更不用說模塊(module)了,JavaScript極其簡單的代碼組織規(guī)范不足以駕馭如此龐大規(guī)模的代碼

模塊

既然JavaScript不能handle如此大規(guī)模的代碼效拭,我們可以借鑒一下其它語言是怎么處理大規(guī)模程序設(shè)計(jì)的暂吉,在Java中有一個(gè)重要的概念——package,邏輯上相關(guān)的代碼組織到同一個(gè)包內(nèi)缎患,包內(nèi)是一個(gè)相對(duì)獨(dú)立的王國慕的,不用擔(dān)心命名沖突什么的,那么外部如果使用呢挤渔?直接import對(duì)應(yīng)的package即可

import java.util.ArrayList;
遺憾的是JavaScript在設(shè)計(jì)時(shí)定位原因肮街,沒有提供類似的功能,開發(fā)者需要模擬出類似的功能判导,來隔離嫉父、組織復(fù)雜的JavaScript代碼沛硅,我們稱為模塊化。

一個(gè)模塊就是實(shí)現(xiàn)特定功能的文件绕辖,有了模塊摇肌,我們就可以更方便地使用別人的代碼,想要什么功能仪际,就加載什么模塊围小。模塊開發(fā)需要遵循一定的規(guī)范,各行其是就都亂套了

規(guī)范形成的過程是痛苦的弟头,前端的先驅(qū)在刀耕火種吩抓、茹毛飲血的階段開始,發(fā)展到現(xiàn)在初具規(guī)模赴恨,簡單了解一下這段不凡的歷程

函數(shù)封裝

我們?cè)谥v函數(shù)的時(shí)候提到疹娶,函數(shù)一個(gè)功能就是實(shí)現(xiàn)特定邏輯的一組語句打包,而且JavaScript的作用域就是基于函數(shù)的伦连,所以把函數(shù)作為模塊化的第一步是很自然的事情雨饺,在一個(gè)文件里面編寫幾個(gè)相關(guān)函數(shù)就是最開始的模塊了

function fn1(){
    statement
}

function fn2(){
    statement
}

這樣在需要的以后加載函數(shù)所在文件,調(diào)用函數(shù)就可以了

這種做法的缺點(diǎn)很明顯:污染了全局變量惑淳,無法保證不與其他模塊發(fā)生變量名沖突额港,而且模塊成員之間沒什么關(guān)系
對(duì)象
為了解決上面問題,對(duì)象的寫法應(yīng)運(yùn)而生歧焦,可以把所有的模塊成員封裝在一個(gè)對(duì)象中

var myModule = {
    var1: 1,

    var2: 2,

    fn1: function(){

    },

    fn2: function(){

    }
}

這樣我們?cè)谙M{(diào)用模塊的時(shí)候引用對(duì)應(yīng)文件移斩,然后

myModule.fn2();

這樣避免了變量污染,只要保證模塊名唯一即可绢馍,同時(shí)同一模塊內(nèi)的成員也有了關(guān)系

看似不錯(cuò)的解決方案向瓷,但是也有缺陷,外部可以隨意修改內(nèi)部成員

myModel.var1 = 100;
這樣就會(huì)產(chǎn)生意外的安全問題
立即執(zhí)行函數(shù)
可以通過立即執(zhí)行函數(shù)舰涌,來達(dá)到隱藏細(xì)節(jié)的目的

var myModule = (function(){
    var var1 = 1;
    var var2 = 2;

    function fn1(){

    }

    function fn2(){

    }

    return {
        fn1: fn1,
        fn2: fn2
    };
})();

這樣在模塊外部無法修改我們沒有暴露出來的變量猖任、函數(shù)

目前,通行的JavaScript模塊規(guī)范主要有兩種:CommonJS和AMD

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末瓷耙,一起剝皮案震驚了整個(gè)濱河市朱躺,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌搁痛,老刑警劉巖长搀,帶你破解...
    沈念sama閱讀 219,427評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異鸡典,居然都是意外死亡源请,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,551評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來巢钓,“玉大人病苗,你說我怎么就攤上這事≈⑿冢” “怎么了硫朦?”我有些...
    開封第一講書人閱讀 165,747評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長背镇。 經(jīng)常有香客問我咬展,道長,這世上最難降的妖魔是什么瞒斩? 我笑而不...
    開封第一講書人閱讀 58,939評(píng)論 1 295
  • 正文 為了忘掉前任破婆,我火速辦了婚禮,結(jié)果婚禮上胸囱,老公的妹妹穿的比我還像新娘祷舀。我一直安慰自己,他們只是感情好烹笔,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,955評(píng)論 6 392
  • 文/花漫 我一把揭開白布裳扯。 她就那樣靜靜地躺著,像睡著了一般谤职。 火紅的嫁衣襯著肌膚如雪饰豺。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,737評(píng)論 1 305
  • 那天允蜈,我揣著相機(jī)與錄音冤吨,去河邊找鬼。 笑死饶套,一個(gè)胖子當(dāng)著我的面吹牛漩蟆,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播凤跑,決...
    沈念sama閱讀 40,448評(píng)論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼爆安,長吁一口氣:“原來是場噩夢啊……” “哼叛复!你這毒婦竟也來了仔引?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,352評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤褐奥,失蹤者是張志新(化名)和其女友劉穎咖耘,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體撬码,經(jīng)...
    沈念sama閱讀 45,834評(píng)論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡儿倒,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,992評(píng)論 3 338
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片夫否。...
    茶點(diǎn)故事閱讀 40,133評(píng)論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡彻犁,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出凰慈,到底是詐尸還是另有隱情汞幢,我是刑警寧澤,帶...
    沈念sama閱讀 35,815評(píng)論 5 346
  • 正文 年R本政府宣布微谓,位于F島的核電站森篷,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏豺型。R本人自食惡果不足惜仲智,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,477評(píng)論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望姻氨。 院中可真熱鬧钓辆,春花似錦、人聲如沸肴焊。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,022評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽抖韩。三九已至蛀恩,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間茂浮,已是汗流浹背双谆。 一陣腳步聲響...
    開封第一講書人閱讀 33,147評(píng)論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留席揽,地道東北人顽馋。 一個(gè)月前我還...
    沈念sama閱讀 48,398評(píng)論 3 373
  • 正文 我出身青樓,卻偏偏與公主長得像幌羞,于是被迫代替她去往敵國和親寸谜。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,077評(píng)論 2 355

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

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,183評(píng)論 25 707
  • 第2章 基本語法 2.1 概述 基本句法和變量 語句 JavaScript程序的執(zhí)行單位為行(line)属桦,也就是一...
    悟名先生閱讀 4,150評(píng)論 0 13
  • 剛畢業(yè)那會(huì)熊痴,有人跟我說再好的感情也會(huì)隨著時(shí)間被消磨掉,我是不信的聂宾。 我一直覺得多年的感情果善,不管是誰,哪里有說散就散...
    謊__言閱讀 557評(píng)論 2 3
  • 其實(shí)我很早就想寫點(diǎn)關(guān)于騎手的短文了,一直沒有動(dòng)筆寫是因?yàn)槲蚁胝f點(diǎn)和別人不一樣的,站在“正義”和“群眾”的對(duì)立面鄙煤,說...
    下雨天Nymeria閱讀 268評(píng)論 0 1
  • 你覺得自己是偏向感性更多一點(diǎn)兒梯刚,還是偏向理性更多一點(diǎn)兒混聊? 什么是感性,什么又是理性乾巧?百科上這樣解釋句喜。 感性,是指人...
    白樺i閱讀 465評(píng)論 0 0