初學(xué)Web前端要注意什么?如何學(xué)好JS模塊化編程?JavaScript是前端三要素之一,也是很多初學(xué)Web前端的人遭遇的第一條攔路虎。很多同學(xué)表示JavaScript涵蓋的知識點(diǎn)太多太復(fù)雜、應(yīng)用也是五花八門完全摸不著頭腦。但只要我們一點(diǎn)一點(diǎn)由基礎(chǔ)到進(jìn)階的學(xué)習(xí),就一定能學(xué)好JavaScript,接下來千鋒小編就給大家分享有關(guān)JavaScript模塊化編程的知識。
模塊是實(shí)現(xiàn)特定功能的一組方法,模塊化是一種規(guī)范、一種約束,這種約束會大大提升開發(fā)效率。JS模塊化思想是將每個(gè)JS文件看作是一個(gè)模塊,每個(gè)模塊通過固定的方式引入,并且通過固定的方式向外暴露指定的內(nèi)容。
模塊化需要實(shí)現(xiàn)的功能
1.解決命名沖突。當(dāng)代碼達(dá)到一定規(guī)模,功能很多的時(shí),命名沖突就會出現(xiàn),模塊化可以很好的解決命名沖突的問題。
2.實(shí)現(xiàn)依賴管理。當(dāng)一個(gè)頁面要加載多個(gè)JS并且他們之際有些還有依賴關(guān)系,這時(shí)候就需要慎重仔細(xì)的排列這些JS的順序,以保證每個(gè)組件都能正常運(yùn)行,而模塊化之后就不用為此多費(fèi)心思。
3.提高復(fù)用性和代碼可讀性。一個(gè)功能為一個(gè)模塊,每個(gè)模塊相互獨(dú)立,互不影響,代碼組件封裝可以重復(fù)利用,去除這個(gè)模塊不影響其它的。
JavaScript模塊化發(fā)展
閉包與命名空間
這是最容易想到的也是最簡便的解決方式,早在模塊化概念提出之前很多人就已經(jīng)使用閉包的方式來解決變量重名和污染問題。這樣每個(gè)JS文件都是使用IIFE包裹的,各個(gè)JS文件分別在不同的詞法作用域中,相互隔離,最后通過閉包的方式暴露變量。每個(gè)閉包都是單獨(dú)一個(gè)文件,每個(gè)文件仍然通過script標(biāo)簽的方式下載,標(biāo)簽的順序就是模塊的依賴關(guān)系。
面向?qū)ο箝_發(fā)
這種方法只是閉包方式的小改進(jìn),約束js文件返回必須是對象,對象其實(shí)就是一些個(gè)方法和屬性的集合。這樣的優(yōu)點(diǎn):1)規(guī)范化輸出,更加統(tǒng)一的便于相互依賴和引用;2)使用‘類’的方式開發(fā),便于后面的依賴進(jìn)行擴(kuò)展。本質(zhì)上這種方法只是對閉包方法的規(guī)范約束,并沒有做什么根本改動(dòng)。
YUI
雅虎出品的一個(gè)工具,模塊化管理只是一部分,其還具有JS壓縮、混淆、請求合并(合并資源需要server端配合)等性能優(yōu)化的工具,可謂是現(xiàn)有JS模塊化的鼻祖。通過YUI全局對象去管理不同模塊,所有模塊都只是對象上的不同屬性,相當(dāng)于是不同程序運(yùn)行在操作系統(tǒng)上。
CommonJs
2009年Nodejs發(fā)布,Commonjs發(fā)布之后,就成了Node里面標(biāo)準(zhǔn)的模塊化管理工具。同時(shí)Node還推出了npm包管理工具,npm平臺上的包均滿足Commonjs規(guī)范,隨著Node與npm的發(fā)展,Commonjs影響力也越來越大,并且促進(jìn)了后面模塊化工具的發(fā)展,具有里程碑意義的模塊化工具。
AMD和RequireJS
AMD是"Asynchronous Module Definition"的縮寫,意思就是"異步模塊定義"。它采用異步方式加載模塊,模塊的加載不影響它后面語句的運(yùn)行。所有依賴這個(gè)模塊的語句,都定義在一個(gè)回調(diào)函數(shù)中,等到所有依賴加載完成之后(前置依賴),這個(gè)回調(diào)函數(shù)才會運(yùn)行。
RequireJs是JS模塊化的工具框架,是AMD規(guī)范的具體實(shí)現(xiàn)。但是有意思的是,RequireJs誕生之后,推廣過程中產(chǎn)生的AMD規(guī)范。RequireJs的優(yōu)點(diǎn):1)動(dòng)態(tài)并行加載js,依賴前置,無需再考慮js加載順序問題;2)核心還是注入變量的沙箱編譯,解決模塊化問題;3)規(guī)范化輸入輸出,使用起來方便;4)對于不滿足AMD規(guī)范的文件可以很好地兼容。
CMD和SeaJs
CMD規(guī)范由國內(nèi)(阿里)誕生,借鑒了Commonjs的規(guī)范與AMD規(guī)范,在兩者基礎(chǔ)上做了改進(jìn)。特點(diǎn):1)define定義模塊、require加載模塊、exports暴露變量;2)不同于AMD的依賴前置,CMD推崇依賴就近(需要的時(shí)候再加載);3)推崇api功能單一,一個(gè)模塊干一件事。
SeaJs是CMD規(guī)范的實(shí)現(xiàn),跟RequireJs類似,CMD也是SeaJs推廣過程中誕生的規(guī)范。CMD借鑒了很多AMD和Commonjs優(yōu)點(diǎn),同樣SeaJs也對AMD和Commonjs做出了很多兼容。
ES6中的模塊化
ES6規(guī)范中終于將模塊化納入JavaScript標(biāo)準(zhǔn),從此JS模塊化被官方扶正,也是未來JS的標(biāo)準(zhǔn)。ES6中的模塊化在Commonjs的基礎(chǔ)上有所不同,增加了關(guān)鍵字import、export、default、as、from,而不是全局對象。二者有兩點(diǎn)主要的區(qū)別:1)CommonJS模塊輸出的是一個(gè)值的拷貝,ES6模塊輸出的是值的引用;2)CommonJS模塊是運(yùn)行時(shí)加載,ES6模塊是編譯時(shí)輸出接口。
想了解更多JavaScript模塊化知識點(diǎn),你可以選擇專業(yè)的學(xué)習(xí)。如果你想快速從基礎(chǔ)到高階、層層遞進(jìn)的掌握前端開發(fā)人員所需的技能,可以選擇專業(yè)的學(xué)習(xí),讓你高效率學(xué)習(xí)、畢業(yè)后輕松拿高薪!
另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務(wù)可用性高、性價(jià)比高”等特點(diǎn)與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場景需求。
分享題目:初學(xué)Web前端要注意什么如何學(xué)好JS模塊化編程-創(chuàng)新互聯(lián)
網(wǎng)站鏈接:http://jinyejixie.com/article40/diceho.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站導(dǎo)航、軟件開發(fā)、網(wǎng)站設(shè)計(jì)、微信小程序、域名注冊、自適應(yīng)網(wǎng)站
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容