亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 語言 > JavaScript > 正文

了解Javascript的模塊化開發

2024-05-06 16:15:40
字體:
來源:轉載
供稿:網友
這篇文章主要介紹了了解Javascript的模塊化開發,本文講解了為什么需要模塊化開發,模塊化開發的形成原因等內容,需要的朋友可以參考下
 

小A是某個創業團隊的前端工程師,負責編寫項目的Javascript程序。

全局變量沖突

根據自己的經驗,小A先把一些常用的功能抽出來,寫成函數放到一個公用文件base.js中:

復制代碼代碼如下:

var _ = {
    $: function(id) { return document.getElementById(id); },
    getCookie: function(key) { ... },
    setCookie: function(key, value) { ... }
};

小A把這些函數都放在_對象內,以防過多的全局變量造成沖突。他告訴團隊的其他成員,如果誰想使用這些函數,只要引入base.js就可以了。

 

小C是小A的同事,他向小A反映:自己的頁面引入了一個叫做underscore.js的類庫,而且,這個類庫也會占用_這個全局變量,這樣一來就會跟base.js中的_沖突了。小A心想,underscore.js是第三方類庫,估計不好改,但是base.js已經在很多頁面鋪開,不可能改。最后小A只好無奈地把underscore.js占用的全局變量改了。

此時,小A發現,把函數都放在一個名字空間內,可以減少全局變量沖突的概率,卻沒有解決全局變量沖突這個問題。

依賴

隨著業務的發展,小A又編寫了一系列的函數庫和UI組件,比方說標簽切換組件tabs.js,此組件需調用base.js以及util.js中的函數。

有一天,新同事小D跟小A反映,自己已經在頁面中引用了tabs.js,功能卻不正常。小A一看就發現問題了,原來小D不知道tabs.js依賴于base.js以及util.js,他并沒有添加這兩個文件的引用。于是,他馬上進行修改:

復制代碼代碼如下:

<script src="tabs.js"></script>
<script src="base.js"></script>
<script src="util.js"></script>

然而,功能還是不正常,此時小A教訓小D說:“都說是依賴,那被依賴方肯定要放在依賴方之前啊”。原來小D把base.js和util.js放到tabs.js之后了。

 

小A心想,他是作者,自然知道組件的依賴情況,但是別人就難說了,特別是新人。

過了一段時間,小A給標簽切換組件增加了功能,為了實現這個功能,tabs.js還需要調用ui.js中的函數。這時,小A發現了一個嚴重的問題,他需要在所有調用了tabs.js的頁面上增加ui.js的引用?。?!

又過了一段時間,小A優化了tabs.js,這個組件已經不再依賴于util.js,所以他在所有用到tabs.js的頁面中移除了util.js的引用,以提高性能。他這一修改,出大事了,測試組MM告訴他,有些頁面不正常了。小A一看,恍然大悟,原來某些頁面的其他功能用到了util.js中的函數,他把這個文件的引用去掉導致出錯了。為了保證功能正常,他又把代碼恢復了。

小A又想,有沒有辦法在修改依賴的同時不用逐一修改頁面,也不影響其他功能呢?

模塊化

小A逛互聯網的時候,無意中發現了一種新奇的模塊化編碼方式,可以把它之前遇到的問題全部解決。

在模塊化編程方式下,每個文件都是一個模塊。每個模塊都由一個名為define的函數創建。例如,把base.js改造成一個模塊后,代碼會變成這樣:

復制代碼代碼如下:

define(function(require, exports, module) {
    exports.$ = function(id) { return document.getElementById(id); };
    exports.getCookie = function(key) { ... };
    exports.setCookie = function(key, value) { ... };
});

base.js向外提供的接口都被添加到exports這個對象。而exports是一個局部變量,整個模塊的代碼都沒有占用半個全局變量。

 

那如何調用某個模塊提供的接口呢?以tabs.js為例,它要依賴于base.js和util.js:

復制代碼代碼如下:

define(function(require, exports, module) {
    var _ = require('base.js'), util = require('util.js');
    var div_tabs = _.$('tabs');
    // .... 其他代碼
});

一個模塊可以通過局部函數require獲取其他模塊的接口。此時,變量_和util都是局部變量,并且,變量名完全是受開發者控制的,如果你不喜歡_,那也可以用base:
復制代碼代碼如下:

define(function(require, exports, module) {
    var base = require('base.js'), util = require('util.js');
    var div_tabs = base.$('tabs');
    // .... 其他代碼
});

一旦要移除util.js、添加ui.js,那只要修改tabs.js就可以了:
復制代碼代碼如下:

define(function(require, exports, module) {
    var base = require('base.js'), ui = require('ui.js');
    var div_tabs = base.$('tabs');
    // .... 其他代碼
});

加載器

 

由于缺乏瀏覽器的原生支持,如果我們要用模塊化的方式編碼,就必須借助于一個叫做加載器(loader)的東西。

目前加載器的實現有很多,比如require.js、seajs。而JRaiser類庫也有自己的加載器。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
日韩h在线观看| 亚洲精品国产精品国自产在线| 国产精品尤物福利片在线观看| 日本精品一区二区三区在线播放视频| 日韩电影视频免费| 国产精品18久久久久久首页狼| 欧美激情免费在线| 国产在线精品一区免费香蕉| 久久久亚洲天堂| 欧美性猛交xxx| 91亚洲一区精品| 亚洲欧洲在线播放| 日本精品久久久久影院| 国产偷国产偷亚洲清高网站| 成人a视频在线观看| 亚洲综合精品一区二区| 中文字幕v亚洲ⅴv天堂| 亚洲欧洲一区二区三区久久| 原创国产精品91| 91sao在线观看国产| 伊人精品在线观看| 欧美激情视频网| 91久久夜色精品国产网站| 97在线视频免费| 国产成人精品国内自产拍免费看| 国产剧情久久久久久| 亚洲欧美综合图区| 亚洲午夜久久久影院| 中文字幕欧美日韩在线| 精品av在线播放| 国产精品极品美女在线观看免费| 久久天堂av综合合色| 久久最新资源网| 亚洲最大在线视频| 欧美日本啪啪无遮挡网站| 亚洲国产成人一区| 国产精品男女猛烈高潮激情| 久久久久五月天| 亚洲自拍偷拍区| 曰本色欧美视频在线| 91精品久久久久久久| 亚洲美女视频网| 国产精品第一视频| 国模私拍一区二区三区| 91精品国产91久久久久久久久| 欧美黑人性猛交| 久久精品国产91精品亚洲| 国产精品视频一区国模私拍| 国产精品成人一区二区三区吃奶| 国产精品av在线| 成人日韩av在线| 国产精品h在线观看| 亚洲va国产va天堂va久久| 国产精品毛片a∨一区二区三区|国| 热99久久精品| 国产精品久久综合av爱欲tv| 精品国产乱码久久久久久天美| 久久久久久18| 亚洲国产精品电影在线观看| www.日韩.com| 91亚洲国产精品| …久久精品99久久香蕉国产| 欧美午夜精品在线| 91极品视频在线| 7777免费精品视频| 91久久久在线| 欧美专区在线视频| 77777少妇光屁股久久一区| 日韩av毛片网| 亚洲精品久久视频| 久久久久久久香蕉网| 国内精品视频久久| 78m国产成人精品视频| 精品一区二区亚洲| 亚洲欧美日韩国产中文专区| 国内外成人免费激情在线视频| 尤物精品国产第一福利三区| 亚洲美女免费精品视频在线观看| 91影院在线免费观看视频| 精品少妇v888av| 91精品国产777在线观看| 91免费综合在线| 欧美巨大黑人极品精男| 欧美性猛交xxxx乱大交| 欧美性猛交xxxx黑人| 亚洲精品色婷婷福利天堂| 国产精品美女免费视频| 青青草一区二区| 欧美激情精品在线| 影音先锋欧美在线资源| 亚洲人在线视频| 国产欧美婷婷中文| 亚洲精品国精品久久99热一| 7m精品福利视频导航| 亚洲成av人乱码色午夜| 欧美野外wwwxxx| 欧美又大粗又爽又黄大片视频| 日韩免费高清在线观看| 精品国产91乱高清在线观看| 国产精品免费视频久久久| 黑人精品xxx一区一二区| 久久香蕉频线观| 欧美一级片免费在线| 国产va免费精品高清在线观看| 精品久久中文字幕久久av| 1769国内精品视频在线播放| 亚洲伊人久久综合| 欧美色欧美亚洲高清在线视频| 国产精品亚洲美女av网站| 欧美精品在线免费播放| 国产精品jizz在线观看麻豆| 亚洲第一综合天堂另类专| 国产成人精品久久二区二区| 亚洲人成网站999久久久综合| 亚洲精品国产精品自产a区红杏吧| 日本一欧美一欧美一亚洲视频| 国产精品日韩欧美综合| 国产免费一区二区三区在线观看| 日韩精品中文字幕视频在线| 日韩一中文字幕| 97超碰国产精品女人人人爽| 视频在线观看99| 亚洲91精品在线| 国产美女主播一区| 亚洲美女av电影| 久久精品中文字幕一区| 亚洲国产女人aaa毛片在线| 91精品国产综合久久香蕉922| 久久久久久尹人网香蕉| 欧美中文字幕在线播放| 中文字幕亚洲欧美日韩2019| 一区二区欧美久久| 欧美成人免费va影院高清| 国产精品欧美亚洲777777| 欧美午夜片欧美片在线观看| 欧美激情亚洲视频| 国产视频在线观看一区二区| 久久777国产线看观看精品| 欧美在线观看网址综合| 亚洲黄色av女优在线观看| 国产欧美一区二区白浆黑人| 日韩中文字幕网| 91九色视频在线| 欧美老女人www| 一区二区三欧美| 亚洲精品免费在线视频| 久久久在线免费观看| 国产精品自产拍在线观看中文| 久久久亚洲国产天美传媒修理工| 欧美www视频在线观看| 欧美国产极速在线| 精品亚洲国产成av人片传媒| 91精品国产91久久久| 91精品国产91久久| 亚洲色图第三页| 久久久久久久影视| 亚洲va久久久噜噜噜久久天堂| 亚洲午夜小视频| 国产精品视频地址| 伊人亚洲福利一区二区三区| 久热精品视频在线| 亚洲精品www| 日韩av成人在线观看| 欧美高清videos高潮hd|