国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專(zhuān)欄INFORMATION COLUMN

使用CommonJS,AMD以及CMD編寫(xiě)模塊化JavaScripts

nifhlheimr / 1755人閱讀

摘要:模塊化編程首先,我想說(shuō)說(shuō)模塊化編程這個(gè)概念當(dāng)我不清楚這個(gè)概念的時(shí)候,其實(shí)說(shuō)什么模塊化編程多好多好都是懵逼的而我一直不覺(jué)得有多好,其實(shí)也是因?yàn)槲覐拈_(kāi)始寫(xiě),就一直都在模塊化編程啊我們寫(xiě)一個(gè)文件然后我們?cè)谖募幸肴缓笳{(diào)用方法哈哈這樣已經(jīng)是模塊化

模塊化編程

首先,我想說(shuō)說(shuō)模塊化編程這個(gè)概念
當(dāng)我不清楚這個(gè)概念的時(shí)候,其實(shí)說(shuō)什么模塊化編程多好多好都是懵逼的
而我一直不覺(jué)得有多好,其實(shí)也是因?yàn)槲覐拈_(kāi)始寫(xiě)js,就一直都在模塊化編程啊

//我們寫(xiě)一個(gè)文件check.js

function check(){
    return true;
}

//然后我們?cè)趆tml文件中引入



//然后調(diào)用方法

這樣已經(jīng)是模塊化編程了
其實(shí)我今天要探討的并不是如何模塊化編程
因?yàn)榛蚨嗷蛏傥覀兌际窃谀K化編程
但想要把一個(gè)項(xiàng)目
用模塊化編程的思想去處理
讓它變得易擴(kuò)展易維護(hù)
需要長(zhǎng)期的撲街爬起撲街爬起

今天想講的其實(shí)應(yīng)該是如何更有效的處理劃分引入js文件

CommonJS

像上述最原始的模塊化編程引入的方法
我們可以看到會(huì)有多行

但凡是有點(diǎn)追求的程序員,是不會(huì)允許一個(gè)頁(yè)面里面有多行重復(fù)的內(nèi)容的
而且主要引入文件的時(shí)候會(huì)有過(guò)多的全局變量暴露在外
平時(shí)寫(xiě)寫(xiě)小項(xiàng)目 就算有bug 找出原因也是容易的
但項(xiàng)目一大 開(kāi)發(fā)人員一多
就會(huì)出現(xiàn)我放在客廳里的點(diǎn)心被偷吃了一塊,那么怪誰(shuí)呢,誰(shuí)叫你放在客廳里

先舉個(gè)CommonJS 的寫(xiě)法的例子

//先創(chuàng)建一個(gè) check_commonjs.js 的文件

var flag = true;

function check(){
    return flag;
}

module.exports = {
    check: check,
}

//在我們需要用到的頁(yè)面加載模塊

var module = require("./check_commonjs.js");

if(module.check()){
    console.log("哈哈哈");
}

在CommonJS里面,被var定義的,在文件中作為全局存在的,在引入后,都還是私有的。當(dāng)然,設(shè)計(jì)者們不是傻瓜
在定義內(nèi)容前 加入 global 那也還是全局的

CommonJS的用法 在Node里面被應(yīng)用的很溜
然而平時(shí)我們?cè)谧鰓eb開(kāi)發(fā)的時(shí)候并不被前端開(kāi)發(fā)人員所追逐
那是為什么呢?
Node作為服務(wù)端應(yīng)用,加載一個(gè)文件,速度就是真的是可以忽略不計(jì)的
然而瀏覽器作為一個(gè)客戶端,在這個(gè)大框框下面,想要加載完一個(gè)js文件
再執(zhí)行下面的js語(yǔ)句
起碼現(xiàn)在速度真沒(méi)那么快
所以就有了我們常用的AMD和CMD

AMD

AMD:異步模塊定義
最常見(jiàn)的應(yīng)用例子就是RequireJS
先舉一個(gè)RequireJS的例子

// 先創(chuàng)建一個(gè) check_amd.js 的文件

define(["check"], function(){
    var flag = true;
    function check(){
        return flag;
    }

    return {
        check: check
    };
});

// 在我們需要用到的頁(yè)面加載模塊

require(["check_amd"], function (check){
    if(check.check()){
        console.log("哈哈哈");
    }
});

從代碼的整潔性和可讀性來(lái)講
CommonJS 要好很多
但AMD定義下的RequireJS 解決了上述同步加載文件導(dǎo)致的問(wèn)題

與AMD對(duì)應(yīng)的就有CMD

CMD

CMD:通用模塊定義
最常見(jiàn)的應(yīng)用例子就是SeaJS
有些人把RequireJS 與 SeaJS做比較的時(shí)候
會(huì)簡(jiǎn)單的認(rèn)為異步與同步的區(qū)別
這明顯不太對(duì)是不是
加載文件的時(shí)候首先一定是異步的

先舉一個(gè)SeaJS的例子

// 先創(chuàng)建一個(gè) check_cmd.js 的文件

define(function(require, exports, module) {
    var a = require("a");//這里就不舉例再創(chuàng)建a文件了
    function check(){
       return a.flag;
    }
    exports.check = check;
});

// 在我們需要用到的頁(yè)面加載模塊
seajs.use(["check_cmd.js"], function(check){
    if(check.check()){
        console.log("哈哈哈");
    }
});

可以看出來(lái)AMD與CMD的本質(zhì)區(qū)別就是
AMD是加載完全部你所需要的文件
CMD是當(dāng)你需要那個(gè)文件的時(shí)候他才加載
兩個(gè)比較下來(lái)就是說(shuō)AMD用戶體驗(yàn)好,因?yàn)闆](méi)有延遲,依賴(lài)模塊提前執(zhí)行了,CMD性能好,因?yàn)橹挥杏脩粜枰臅r(shí)候才執(zhí)行

最后

其實(shí)AMD與CMD的模式比較下來(lái)還是很繁瑣
最喜歡的還是CommonJS的模式
那么如何利用CommonJS來(lái)編寫(xiě)JavaScripts,并沒(méi)有最上述提到的由于瀏覽器加載文件需要時(shí)間,傳統(tǒng)CommonJS模塊在瀏覽器環(huán)境中無(wú)法正常運(yùn)行的問(wèn)題呢
且聽(tīng)下回分解

附上我的訂閱號(hào),歡迎關(guān)注,一起學(xué)前端

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/90842.html

相關(guān)文章

  • 關(guān)于JavaScript模塊規(guī)范之CommonJSAMDCMD

    摘要:所有依賴(lài)這個(gè)模塊的語(yǔ)句,都定義在一個(gè)回調(diào)函數(shù)中,等到加載完成之后,這個(gè)回調(diào)函數(shù)才會(huì)運(yùn)行。也采用語(yǔ)句加載模塊,但是不同于,它要求兩個(gè)參數(shù)第一個(gè)參數(shù),是一個(gè)數(shù)組,里面的成員就是要加載的模塊第二個(gè)參數(shù),則是加載成功之后的回調(diào)函數(shù)。 本篇文章來(lái)自對(duì)文章《js模塊化編程之徹底弄懂CommonJS和AMD/CMD!》的總結(jié),大部分摘自文章原話,本人只是為了學(xué)習(xí)方便做的筆記,之后有新的體會(huì)會(huì)及時(shí)補(bǔ)充...

    binaryTree 評(píng)論0 收藏0
  • 淺談 JavaScript 塊化編程

    摘要:與在模塊化編程的世界中,有兩個(gè)規(guī)范不得不提,它們分別是和。所有依賴(lài)于某個(gè)模塊的代碼全部移到模塊加載語(yǔ)句的回調(diào)函數(shù)中去。的語(yǔ)句接受兩個(gè)參數(shù)在回調(diào)函數(shù)中,可以通過(guò)變量引用模塊。回調(diào)函數(shù)的返回值就是當(dāng)前對(duì)象的導(dǎo)出值。 JavaScript本身不是一種模塊化語(yǔ)言,設(shè)計(jì)者在創(chuàng)造JavaScript之初應(yīng)該也沒(méi)有想到這么一個(gè)腳本語(yǔ)言的作用領(lǐng)域會(huì)越來(lái)越大。以前一個(gè)頁(yè)面的JS代碼再多也不會(huì)多到哪兒去,...

    wdzgege 評(píng)論0 收藏0
  • 模仿RequireJs的用法實(shí)現(xiàn)一個(gè)低配版的模塊加載器

    摘要:我想自己可以嘗試一下寫(xiě)一個(gè)低配版的模塊加載器來(lái)應(yīng)付一下我這個(gè)單頁(yè)網(wǎng)站,當(dāng)然只是大致模仿了主要功能。是這樣處理的模塊依賴(lài),同時(shí)依賴(lài),這種情況下的模塊函數(shù)被調(diào)用時(shí),被傳入的是,所以需要自己在里面手動(dòng)一下。 Contents 前言 回顧RequireJs的基本用法 實(shí)現(xiàn)原理 使用方法 總結(jié) 前言 前段時(shí)間一直想用單頁(yè)開(kāi)發(fā)技術(shù)寫(xiě)一個(gè)自己的個(gè)人網(wǎng)站(使用es2015),寫(xiě)了一部分之后,發(fā)現(xiàn)單...

    WalkerXu 評(píng)論0 收藏0
  • JS學(xué)習(xí)筆記 - 塊化

    摘要:在開(kāi)發(fā)大型的項(xiàng)目中,可能會(huì)使用到管理的模塊化工具。說(shuō)道,學(xué)習(xí)過(guò)的同學(xué)會(huì)比較熟悉,是服務(wù)器模塊的規(guī)范,采用了這個(gè)規(guī)范。可能是未來(lái)模塊化解決方案的首選。 本文章記錄本人在學(xué)習(xí) JavaScript 中理解到的一些東西,加深記憶和并且整理記錄下來(lái),方便之后的復(fù)習(xí)。 在開(kāi)發(fā)大型的web項(xiàng)目中,可能會(huì)使用到管理js的模塊化工具。但是在前端輪子漫天飛的時(shí)代。那一款js模塊化工具真正適合我...

    CntChen 評(píng)論0 收藏0
  • 談?wù)凧s前端塊化規(guī)范

    摘要:依賴(lài)全部加載完成后,調(diào)用回調(diào)函數(shù)規(guī)范異步加載模塊規(guī)范和很相似,簡(jiǎn)單,并與和的規(guī)范保持了很大的兼容性在規(guī)范中,一個(gè)模塊就是一個(gè)文件。 拋出問(wèn)題: 在開(kāi)發(fā)中在導(dǎo)入模塊時(shí)經(jīng)常使用require和import; 導(dǎo)出模塊時(shí)使用module.exports/exports或者export/export default; 有時(shí)候?yàn)榱艘靡粋€(gè)模塊會(huì)使用require奇怪的是也可以使用import?...

    Steve_Wang_ 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<