成人无码视频,亚洲精品久久久久av无码,午夜精品久久久久久毛片,亚洲 中文字幕 日韩 无码

資訊專欄INFORMATION COLUMN

對(duì)比requirejs更好的理解seajs

Harpsichord1207 / 1917人閱讀

摘要:遵循規(guī)范,遵循規(guī)范。很多時(shí)候我們想在執(zhí)行方法的時(shí)候再去加載,而不是提前在頁(yè)面加載的時(shí)候就把加載。匹配到時(shí)不加載。所以,達(dá)到了用到時(shí)再去異步加載并執(zhí)行的目的。

seajs遵循CMD規(guī)范,requirejs遵循AMD規(guī)范。AMD規(guī)范是預(yù)加載,CMD規(guī)范是賴加載。

下文舉例假設(shè)有文件 b.js, c.js如下

//b.js
define(function(require, exports, module){
    console.log("b is loaded")

    function run(){
        console.log("b run");
    }
    exports.run = run;
})

//c.js
define(function(require, exports, module){
    console.log("c is loaded")

    function run(){
        console.log("c run");
    }
    exports.run = run;
})
1. seajs對(duì)依賴模塊只加載不執(zhí)行,requirejs對(duì)依賴模塊既加載也執(zhí)行

運(yùn)行代碼:

// seajs



    seajs
    







// requirejs



    requirejs
    







// a.js
define(["b"], function(){
})

運(yùn)行結(jié)果:

seajs:

控制臺(tái)無(wú)輸出

requirejs:

控制臺(tái):

2. seajs ,requirejs在 require文件時(shí)既加載也執(zhí)行
//a.js
define(function(require, exports, module){
    var b = require("b")
})
3. seajs可以在任意處直接require文件,無(wú)需提前寫(xiě)依賴模塊;一旦提前寫(xiě)了任意一個(gè)依賴模塊,下面的所有require的使用必須保證也有其對(duì)應(yīng)的依賴模塊

seajs可以直接如下使用,無(wú)需寫(xiě)依賴["b"]:

//a.js
define(function(require, exports, module){
    var b = require("b")
})

或

define(["b"], function(require, exports, module){
    var b = require("b")
})

運(yùn)行結(jié)果:

控制臺(tái):b is loaded

假如 a.js 依賴了另一個(gè) c.js,則在 a.js 中使用 require("b") 時(shí)必須也寫(xiě)上依賴["b"],否則b.js將因?yàn)椴檎也坏蕉粫?huì)加載

define(["c"], function(require, exports, module){
    var b = require("b")
})

運(yùn)行結(jié)果:

控制臺(tái)無(wú)輸出(不會(huì)輸出c is loaded, 因?yàn)闆](méi)有require("c") )

如果此時(shí)我們執(zhí)行b.run()

define(["c"], function(require, exports, module){
    var b = require("b")
    b.run()
})

控制臺(tái)將會(huì)報(bào)錯(cuò),因?yàn)榇藭r(shí)b為null:


此時(shí)正確寫(xiě)法應(yīng)該寫(xiě)上依賴 ["b"]:

define(["c", "b"], function(require, exports, module){
    var b = require("b")
    b.run()
}) 

運(yùn)行結(jié)果:

結(jié)論:

對(duì)于seajs,如果不寫(xiě)依賴那就一個(gè)都不要寫(xiě),一旦寫(xiě)了,下面所有require的地方都需要提前在頭部寫(xiě)上依賴

requirejs的依賴寫(xiě)法如下:
define(["c", "b"], function(c, b){
    var b = require("b")
    b.run()
})

或

define(function(require, exports, module){
    var b = require("b")
    b.run()
})

//錯(cuò)誤寫(xiě)法
define(["c"], function(c){
    var b = require("b")
    b.run()
})
4. seajs的require.async在執(zhí)行到使用位置的時(shí)候才去異步加載

seajs:

如下例:

// a.js
define(function(require, exports, module){
    document.getElementById("btn").addEventListener("click",       function(){
     document.getElementById("btn").innerHTML = "btn is clicked"
        init()
    })
    
    function init(){
        var b = require("b");
        b.run()
    }
})

運(yùn)行結(jié)果:

控制臺(tái)無(wú)輸出

點(diǎn)擊OK按鈕, b.js 加載并執(zhí)行b.js和run方法:

大家注意到,在未點(diǎn)擊按鈕之前,雖然沒(méi)有執(zhí)行init方法,但b.js依然被提前加載了進(jìn)來(lái),但沒(méi)有被執(zhí)行(沒(méi)有輸出b is loaded)。

很多時(shí)候我們想在執(zhí)行init方法的時(shí)候再去加載b.js,而不是提前在頁(yè)面加載的時(shí)候就把b,js加載。

這時(shí)候就需要用到require.async,如下:

//a.js
define(function(require, exports, module){
    document.getElementById("btn").addEventListener("click", function(){
        document.getElementById("btn").innerHTML = "btn is clicked"
        init()
    })
    
    function init(){
        require.async("b", function(b){
            b.run()
        });
    }
})

這時(shí)候運(yùn)行結(jié)果:

b.js沒(méi)有被加載:

控制臺(tái)無(wú)輸出:

點(diǎn)擊OK按鈕:

b.js被加載

控制臺(tái)輸出:

這是因?yàn)楫?dāng)執(zhí)行一個(gè)js時(shí),seajs會(huì)先去查找匹配require,然后加載相應(yīng)資源,但不執(zhí)行。匹配到require.async時(shí)不加載。

所以,require.async達(dá)到了用到時(shí)再去異步加載并執(zhí)行的目的。

小問(wèn)題:

如果是requirejs執(zhí)行下面代碼:

//a.js
define(function(require, exports, module){
    document.getElementById("btn").addEventListener("click", function(){
        document.getElementById("btn").innerHTML = "btn is clicked"
        init()
    })
    
    function init(){
        var b = require("b");
        b.run()
    }
})

資源如何加載?控制臺(tái)又會(huì)輸出什么呢?點(diǎn)擊ok按鈕又會(huì)輸出啥?
答:資源加載了a.js, b.js, 控制臺(tái)輸出:b is loaded, 點(diǎn)擊OK按鈕控制臺(tái)繼續(xù)輸出:b run

總結(jié):

seajs對(duì)依賴模塊只加載不執(zhí)行,requirejs對(duì)依賴模塊加載并執(zhí)行

seajs ,requirejs在 require具體文件時(shí)既加載也執(zhí)行

seajs可以在任意處直接require文件,無(wú)需提前寫(xiě)依賴模塊;一旦提前寫(xiě)了任意一個(gè)依賴模塊,下面的所有require的使用必須保證也有其對(duì)應(yīng)的依賴模塊

seajs的require.async在執(zhí)行到使用位置的時(shí)候才去異步加載

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

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

相關(guān)文章

  • JavaScript模塊化發(fā)展

    摘要:所有依賴這個(gè)模塊的語(yǔ)句,都定義在一個(gè)回調(diào)函數(shù)中,等到所有依賴加載完成之后前置依賴,這個(gè)回調(diào)函數(shù)才會(huì)運(yùn)行。如果將前面的代碼改寫(xiě)成形式,就是下面這樣定義了一個(gè)文件,該文件依賴模塊,當(dāng)模塊加載完畢之后執(zhí)行回調(diào)函數(shù),這里并沒(méi)有暴露任何變量。 模塊化是我們?nèi)粘i_(kāi)發(fā)都要用到的基本技能,使用簡(jiǎn)單且方便,但是很少人能說(shuō)出來(lái)但是的原因及發(fā)展過(guò)程?,F(xiàn)在通過(guò)對(duì)比不同時(shí)期的js的發(fā)展,將JavaScript模...

    mengbo 評(píng)論0 收藏0
  • seajsrequirejs那些事兒

    摘要:遵循的是異步模塊定義規(guī)范,遵循的是通用模塊定義規(guī)范。規(guī)范的不同,導(dǎo)致了兩者的不同。在嘗試讓第三方類庫(kù)修改自身來(lái)支持,目前只有少數(shù)社區(qū)采納。是沒(méi)有明顯的,是明顯沒(méi)有。無(wú)這方面的支持。 發(fā)布之后發(fā)現(xiàn)存在一個(gè)顯示的問(wèn)題,大家可以移步到我的簡(jiǎn)書(shū)參考,謝謝大家?。?!我的簡(jiǎn)書(shū)《seajs和requirejs技術(shù)指導(dǎo)文檔》 昨天到今天,老衲翻閱數(shù)十篇技術(shù)文檔,為了搞明白seajs(CMD)和 req...

    zorpan 評(píng)論0 收藏0
  • require.js構(gòu)建優(yōu)化

    摘要:未構(gòu)建之前,全部分開(kāi)加載。的優(yōu)化,得再看下的示例,然后再寫(xiě)篇筆記記錄下來(lái)。 想摸透javascript模塊化編程是怎么一回事,在seajs和requirejs之間兜兜轉(zhuǎn)轉(zhuǎn),看了許多相關(guān)資料和文章,算是大致理清它們的異同,撇開(kāi)requirejs加載方式的另類(其實(shí)目前我暫時(shí)還沒(méi)去感受),于寫(xiě)法,比較喜歡requirejs的寫(xiě)法,這個(gè)比較主觀,這也得益于阮一峰大大那篇Javascript模...

    yacheng 評(píng)論0 收藏0
  • Javascript模塊全攬

    摘要:要求模塊編寫(xiě)必須在真正的代碼之外套上一層規(guī)定的代碼包裝,樣子看起來(lái)是這樣的模塊代碼通過(guò)傳遞一個(gè)簽名為的回調(diào)函數(shù)給函數(shù),就可以把需要注入的變量和函數(shù)注入到模塊代碼內(nèi)。 之前寫(xiě)的文章急速Js全棧教程得到了不錯(cuò)的閱讀量,霸屏掘金頭條3天,點(diǎn)贊過(guò)千,閱讀近萬(wàn),甚至還有人在評(píng)論區(qū)打廣告,可見(jiàn)也是一個(gè)小小的生態(tài)了;)。看來(lái)和JS全棧有關(guān)的內(nèi)容,還是有人頗有興趣的。 showImg(https://...

    lily_wang 評(píng)論0 收藏0
  • seajs 模塊化編程js代碼

    摘要:模塊初始化時(shí),會(huì)調(diào)用且僅調(diào)用一次該工廠函數(shù)。用來(lái)向外提供模塊的除了給對(duì)象增加成員,還可以使用直接向外提供可簡(jiǎn)化為函數(shù)用來(lái)訪問(wèn)其他模塊提供的異步加載模塊,并在加載完成后執(zhí)行回調(diào)函數(shù)使用的內(nèi)部機(jī)制來(lái)解析并返回模塊路徑。手冊(cè)的模塊化插件 seajs是我剛?cè)腴T前端就接觸到的一個(gè)javaScript模塊加載框架。使用seajs后javaScript代碼的可讀性和清晰度有了很大的提升,插件的使用和...

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

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

0條評(píng)論

閱讀需要支付1元查看
<