国产成人精品久久免费动漫-国产成人精品天堂-国产成人精品区在线观看-国产成人精品日本-a级毛片无码免费真人-a级毛片毛片免费观看久潮喷

您的位置:首頁(yè)技術(shù)文章
文章詳情頁(yè)

詳解Js模塊化的作用原理和方案

瀏覽:105日期:2024-03-30 11:16:52
一、模塊化概念

將一個(gè)復(fù)雜的程序依據(jù)一定的規(guī)則(規(guī)范)封裝成幾個(gè)塊(文件), 并進(jìn)行組合在一起;塊的內(nèi)部數(shù)據(jù)與實(shí)現(xiàn)是私有的, 只是向外部暴露一些接口(方法)與外部其它模塊通信。

二、模塊化作用

為什么要用模塊化的JavaScript?

因?yàn)樵趯?shí)際的開發(fā)過(guò)程中,經(jīng)常會(huì)遇到變量、函數(shù)、對(duì)象等名字的沖突,這樣就容易造成沖突,還會(huì)造成全局變量被污染;同時(shí),程序復(fù)雜時(shí)需要寫很多代碼,而且還要引入很多類庫(kù),這樣稍微不注意就容易造成文件依賴混亂;為了解決上面的的問(wèn)題,我們才開始使用模塊化的js,所以說(shuō)模塊化的作用就是:

避免全局變量被污染 便于代碼編寫和維護(hù)三、模塊化歷程1、普通寫法(全局函數(shù)及變量)

其實(shí)只要是不同的函數(shù)或變量放一起就是簡(jiǎn)單的模塊,這樣弊端很明顯,就是變量容易被污染;

var name = ’卡卡’;function cat1(){ name = ’年年’;}function cat2(){ name = ’有魚’;}2、對(duì)象封裝

將整個(gè)模塊放在一個(gè)對(duì)象里面,外部訪問(wèn)時(shí)直接調(diào)用對(duì)象的屬性或者方法就行

var cat = { name:’卡卡’, cat1:function(){var name = ’年年’;console.log(name); }, cat2:function(){var name = ’有魚’;console.log(name); }}cat.name;// 卡卡cat.cat1();// 年年cat.cat2();// 有魚

這種方法雖然解決了變量沖突問(wèn)題,但是容易被外部隨意修改:

cat.name = ’樓樓’;3、匿名函數(shù)方式

var cat = (function () { // 匿名函數(shù)的局部變量name var name = ’卡卡’; // 匿名函數(shù)的局部函數(shù)cat1 var cat1 = function () {var name = ’年年’;console.log(name); }; // 匿名函數(shù)的局部函數(shù)cat2 var cat2 = function () {var name = ’有魚’;console.log(name); }; //通過(guò)window暴露一個(gè)對(duì)外的口,想要被外界訪問(wèn),可以放到這里 window.myModule = {cat1:cat1,cat2:cat2,name:name, };})();console.log(myModule.name);// name變量放入暴露口內(nèi),可以輸出,結(jié)果為:卡卡myModule.cat1();// cat1函數(shù)放入暴露口內(nèi),可以輸出,結(jié)果為:年年myModule.cat2();// cat2函數(shù)放入暴露口內(nèi),可以輸出,結(jié)果為:有魚

如果把變量name移除,此時(shí)再訪問(wèn)就訪問(wèn)不了,結(jié)果為undefined,這樣就實(shí)現(xiàn)了變量不被隨意修改的問(wèn)題,即:

window.myModule = { cat1:cat1, cat2:cat2,};console.log(myModule.name);// undefined

匿名函數(shù)方式基本上解決了函數(shù)污染及變量隨意被修改問(wèn)題,這個(gè)也是模塊化規(guī)范的基石!

詳解Js模塊化的作用原理和方案

四、模塊化方案

根據(jù)匿名函數(shù)自調(diào)用的方式,同時(shí)為了增強(qiáng)代碼依賴性,現(xiàn)在大部分JavaScript運(yùn)行環(huán)境都有自己的模塊化規(guī)范;

可以分為:Commonjs、AMD、CMD、ES6 module四大類

1、CommonJS

①在node環(huán)境下使用,不支持瀏覽器環(huán)境②NodeJS遵循的規(guī)范③使用require()進(jìn)行引入依賴④使用exports進(jìn)行暴露模塊

2、AMD

①瀏覽器環(huán)境下的異步加載模塊②RequireJS遵循的規(guī)范③依賴于require.js模塊管理工具庫(kù)④AMD 推崇依賴前置

3、CMD

①瀏覽器環(huán)境下,同時(shí)支持異步和同步加載②SeaJS遵循的規(guī)范③CMD 推崇依賴就近

4、ES6 module

ES6模塊化語(yǔ)法在編譯時(shí)就能確定模塊的依賴關(guān)系,還能確定好輸入輸出的變量聲明,已經(jīng)不僅僅是模塊規(guī)范,現(xiàn)在已經(jīng)作為JS語(yǔ)言的標(biāo)準(zhǔn)語(yǔ)法使用,有以下特性:

①瀏覽器環(huán)境、服務(wù)器環(huán)境都支持②編譯時(shí)就能確定模塊的依賴關(guān)系及變量,其他模塊規(guī)范都是在運(yùn)行時(shí)確定的③export命令用于規(guī)定模塊的對(duì)外接口④import命令用于輸入其他模塊提供的功能

這里補(bǔ)充一點(diǎn):ES5版本的模塊化方案,僅在語(yǔ)言的層面上實(shí)現(xiàn)了模塊化,缺點(diǎn)在于無(wú)法直接運(yùn)行在大部分 JavaScript 運(yùn)行環(huán)境下,必須通過(guò)構(gòu)建工具轉(zhuǎn)換成標(biāo)準(zhǔn)的 ES5 后才能正常運(yùn)行,這里就需要使用自動(dòng)化構(gòu)建工具webpack。

以上就是詳解Js模塊化的作用原理和方案的詳細(xì)內(nèi)容,更多關(guān)于Js模塊化的資料請(qǐng)關(guān)注好吧啦網(wǎng)其它相關(guān)文章!

標(biāo)簽: JavaScript
相關(guān)文章:
主站蜘蛛池模板: 亚洲乱强 | 在线视频 国产交换 | 国内视频一区 | 欧美一级永久免费毛片在线 | 欧美亚洲第一区 | 亚洲精品在线免费 | 亚洲九九视频 | 免费韩国一级毛片 | 男人好大好硬好爽免费视频 | 99视频在线播放 | 女人张开腿让男人捅视频 | 国产成人午夜性a一级毛片 国产成人午夜性视频影院 国产成人香蕉久久久久 | 澳门一级特黄真人毛片 | 扒开双腿猛进入爽爽在线观看 | 亚洲视频精品在线 | 手机看片国产欧美日韩高清 | 久久精品免费一区二区视 | 成人性色生活片免费网 | 亚洲国产福利精品一区二区 | 青青热在线精品视频免费 | 国产成人免费影片在线观看 | 国产vs久久 | 免费看香港一级毛片 | 中国做爰国产精品视频 | 自拍一页 | 久久99国产精一区二区三区! | 可以免费看黄的网站 | 一级做a爰性色毛片免费 | 国产精选在线播放 | 操小美女| 亚洲成人视 | 日韩 欧美 自拍 在线 视频 | 精品玖玖玖视频在线观看 | 精品免费久久久久国产一区 | 中文字幕在线看视频一区二区三区 | 国产免费久久精品99 | 特级做a爰片毛片免费看一区 | 91精品一区二区三区在线播放 | 亚洲精品久久99久久一区 | 欧美精品色视频 | 欧美一级毛片免费高清的 |