模塊化簡(jiǎn)介第一章

需要模塊管理的原因就是JavaScript發(fā)展的越來(lái)越快,超過(guò)了它產(chǎn)生時(shí)候的自我定位。由于沒(méi)有模塊管理的概念,在做大型項(xiàng)目或者文件組織的時(shí)候,就會(huì)異常糾結(jié)。所以才會(huì)產(chǎn)生出這么多的模塊管理工具。模塊化的主要特征是:

  • 模塊化,可重用
  • 封裝了變量和function,和全局的namaspace不接觸,松耦合
  • 只暴露可用public的方法,其它私有方法全部隱藏

實(shí)現(xiàn)方式

初級(jí)階段,代碼中充斥的是各種函數(shù),通過(guò)名稱區(qū)分:
function func1() {}

  function func2() {}

實(shí)際上這些函數(shù)都被掛載到了全局變量下,使用的時(shí)候可以直接調(diào)用,缺點(diǎn)就是: "污染"了全局變量,無(wú)法保證不與其他模塊發(fā)生變量名沖突,而且模塊成員之間看不出直接關(guān)系。

對(duì)象寫法

解決上述污染問(wèn)題,可以把模塊寫成一個(gè)對(duì)象,所有的模塊成員都放到這個(gè)對(duì)象里面。

var module1 = new Object({
    _count: 0,
    m1: function() {
        //...
    },
    m2: function() {
        //...
    }
  });
  // 等價(jià)于
  var module2 = {
    _count: 0,
    m1: function() {
        //...
    },
    m2: function() {
        //...
    }
  }

外部可以通過(guò)定義的變量名訪問(wèn),起到了一點(diǎn)點(diǎn)的命名空間作用,但是同樣缺點(diǎn)明顯: 會(huì)暴露所有模塊成員,內(nèi)部狀態(tài)可以被外部改寫。比如,外部代碼可以直接改變內(nèi)_count的值。

立刻執(zhí)行函數(shù)(Immediately-Invoked Function Expression,IIFE) or 匿名閉包

如果你不需要傳參數(shù)或者沒(méi)有一些特殊苛刻的要求的,可以使用立刻執(zhí)行函數(shù),該實(shí)例在內(nèi)存中只會(huì)存在一份copy。

    var module1 = (function() {    
    var _count = 0;    
    var m1 = function() {       //...
            };    
    var m2 = function() {       //...
            };    
    return {      
        m1: m1,
              m2: m2    
    };  
})();

這樣可以很好的保護(hù)私有變量,通過(guò)return來(lái)設(shè)置公開(kāi)的方法。缺點(diǎn)也有: 動(dòng)態(tài)添加方法的時(shí)候比較麻煩,且無(wú)法修改內(nèi)部私有變量 .

                    未完...
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容