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

資訊專欄INFORMATION COLUMN

對比requirejs更好的理解seajs

Harpsichord1207 / 1869人閱讀

摘要:遵循規(guī)范,遵循規(guī)范。很多時候我們想在執(zhí)行方法的時候再去加載,而不是提前在頁面加載的時候就把加載。匹配到時不加載。所以,達到了用到時再去異步加載并執(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對依賴模塊只加載不執(zhí)行,requirejs對依賴模塊既加載也執(zhí)行

運行代碼:

// seajs



    seajs
    







// requirejs



    requirejs
    







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

運行結(jié)果:

seajs:

控制臺無輸出

requirejs:

控制臺:

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

seajs可以直接如下使用,無需寫依賴["b"]:

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

或

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

運行結(jié)果:

控制臺:b is loaded

假如 a.js 依賴了另一個 c.js,則在 a.js 中使用 require("b") 時必須也寫上依賴["b"],否則b.js將因為查找不到而不會加載

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

運行結(jié)果:

控制臺無輸出(不會輸出c is loaded, 因為沒有require("c") )

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

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

控制臺將會報錯,因為此時b為null:


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

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

運行結(jié)果:

結(jié)論:

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

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

或

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

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

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()
    }
})

運行結(jié)果:

控制臺無輸出

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

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

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

這時候就需要用到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()
        });
    }
})

這時候運行結(jié)果:

b.js沒有被加載:

控制臺無輸出:

點擊OK按鈕:

b.js被加載

控制臺輸出:

這是因為當(dāng)執(zhí)行一個js時,seajs會先去查找匹配require,然后加載相應(yīng)資源,但不執(zhí)行。匹配到require.async時不加載。

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

小問題:

如果是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()
    }
})

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

總結(jié):

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

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

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

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

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

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

相關(guān)文章

  • JavaScript模塊化發(fā)展

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

    mengbo 評論0 收藏0
  • seajsrequirejs那些事兒

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

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

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

    yacheng 評論0 收藏0
  • Javascript模塊全攬

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

    lily_wang 評論0 收藏0
  • seajs 模塊化編程js代碼

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

    YJNldm 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<