亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

javascript按順序加載運行js方法

 更新時間:2017年12月01日 14:33:59   投稿:laozhang  
本篇文章主要教給大家如何在javascript中動態(tài)加載按順序加載運行js的方法以及實現(xiàn)代碼,需要的朋友參考學習下吧。

首先如果大家對JS動態(tài)加載有不理解的地方可以參閱:

javascript動態(tài)加載實現(xiàn)方法

動態(tài)加載JS文件的三種方法

如何你的 script 上沒有任何 異步,阻塞 等標注:

瀏覽器會異步加載 javascript 文件,但是會按照引用文件中的書寫順序從上到下執(zhí)行解析 javascript

Defer屬性標記

defer是html4.0中定義的,該屬性使得瀏覽器能延遲腳本的執(zhí)行,等文檔完成解析完成后會按照他們在文檔出現(xiàn)順序再去下載解析。

也就是說defer屬性的 script 就類似于將 script 放在body中的加載 效果一致.

但是defer屬性在各個瀏覽器中支持程度有點不同,就是說,有的瀏覽器不完全支持.

Async屬性標注

async是HTML5新增的屬性, 大部分先進支持該屬性的.
該屬性的作用是讓腳本能異步加載,也就是說當瀏覽器遇到async屬性的 script 時瀏覽器加載css一樣是異步加載的

javascript 動態(tài)加載js文件

原理很簡單,創(chuàng)建一個 script 節(jié)點,給節(jié)點賦予 script 的屬性,然后 append 到 dom 的 head 標簽中.

function loadJS(url){
  var Script = document.createElement('script');
  Script.setAttribute('src', url);
  Script.setAttribute('type', 'text/javascript');
  document.body.appendChild(Script);
  return Script;
}

如果我們同時加載多個 javascript 文件

loadJS('a.js');
loadJS('b.js');

上面的效果是,a.js 和 b.js 文件會被異步同時加載,如果 b.js 文件比 a.js 文件小的話,很可能先加載執(zhí)行 b.js ,完全不會按照書寫結果加載執(zhí)行

所以,如果你的 b.js 文件有依賴 a.js 的東西,那么就會報錯,因為解釋執(zhí)行b.js 的時候,a.js 還在加載中.

控制javascript 加載執(zhí)行順序

我們對代碼做如下改進

function loadJS(url, success) {
      var domScript = document.createElement('script');
      domScript.src = url;
      success = success || function () {
          };
      domScript.onload = domScript.onreadystatechange = function () {
        if (!this.readyState || 'loaded' === this.readyState || 'complete' === this.readyState) {
          success();
          this.onload = this.onreadystatechange = null;
          this.parentNode.removeChild(this);
        }
      }
      document.getElementsByTagName('head')[0].appendChild(domScript);
    }

通過script 節(jié)點上的 onload 和 onreadystatechange 屬性來監(jiān)聽節(jié)點 src 是否加載完成

如果成功,調用回調函數(shù) success();

我們在調用此方法的時候,可以通過 loadJS 回調函數(shù)來知道當前節(jié)點已經加載完成,然后在回調函數(shù)里繼續(xù)加載其他 script 文件

loadJS(getUrl('a.js'), function () {
      loadJS(getUrl('b.js'), function () {
        console.log('a.js ,b.js 加載完成');
      });
});

通過上面的方法加載,是一種同步阻塞加載, a.js 加載完成后才會加載執(zhí)行 b.js 文件.

如果你的 javascript 文件沒有相互依賴關系,不要使用這種方法.

相關文章

  • JS中數(shù)據類型的正確判斷方法實例

    JS中數(shù)據類型的正確判斷方法實例

    怎么去判斷一個數(shù)據屬于哪個數(shù)據類型,這個是很常見的操作,我們一般都會想到typeof和instanceof這兩個常見的方法,但有時候這兩種方法并不能滿足我們的需求,下面這篇文章主要給大家介紹了關于JS中數(shù)據類型的正確判斷方法,需要的朋友可以參考下
    2021-08-08
  • MQTT.js 入門使用教程

    MQTT.js 入門使用教程

    MQTT.js?是一個開源的?MQTT 協(xié)議的客戶端庫,使用 JavaScript 編寫,主要用于 Node.js 和 瀏覽器環(huán)境中,這篇文章主要介紹了MQTT.js 入門教程,需要的朋友可以參考下
    2023-04-04
  • js 單擊式的下拉菜單效果實例

    js 單擊式的下拉菜單效果實例

    這篇文章介紹了js 單擊式的下拉菜單效果實例,有需要的朋友可以參考一下
    2013-08-08
  • Javascript排序算法之計數(shù)排序的實例

    Javascript排序算法之計數(shù)排序的實例

    計數(shù)排序是一種高效的線性排序,它通過計算一個集合中元素楚翔的次數(shù)來確定集合如何排列,計數(shù)排序不需要進行數(shù)據的比較,所有他的運行效率前面介紹的都高
    2014-04-04
  • JavaScript 隨機驗證碼的生成實例代碼

    JavaScript 隨機驗證碼的生成實例代碼

    這篇文章主要介紹了JavaScript 隨機驗證碼的生成實例代碼的相關資料,需要的朋友可以參考下
    2016-09-09
  • bootstrap實現(xiàn)點擊刪除按鈕彈出確認框的實例代碼

    bootstrap實現(xiàn)點擊刪除按鈕彈出確認框的實例代碼

    本文通過實例代碼給大家介紹了bootstrap實現(xiàn)點擊刪除按鈕彈出確認框的方法,需要的朋友參考下吧
    2018-08-08
  • 優(yōu)雅而高效的JavaScript?try...catch語句詳解(js異常處理)

    優(yōu)雅而高效的JavaScript?try...catch語句詳解(js異常處理)

    這篇文章主要給大家介紹了關于JavaScript中try...catch語句的相關資料,也就是js異常處理方法,try...catch是JavaScript中的錯誤處理機制,它的作用是捕獲和處理可能發(fā)生的錯誤,以避免程序崩潰,需要的朋友可以參考下
    2024-01-01
  • 微信小程序中的生命周期與生命周期函數(shù)淺析介紹

    微信小程序中的生命周期與生命周期函數(shù)淺析介紹

    這篇文章主要介紹了微信小程序中的生命周期與生命周期函數(shù)的介紹,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2022-08-08
  • JS根據生日算年齡的方法

    JS根據生日算年齡的方法

    這篇文章主要介紹了JS根據生日算年齡的方法,涉及javascript操作時間的相關技巧,非常簡單實用,需要的朋友可以參考下
    2015-05-05
  • Javascript實現(xiàn)跑馬燈效果的簡單實例

    Javascript實現(xiàn)跑馬燈效果的簡單實例

    下面小編就為大家?guī)硪黄狫avascript實現(xiàn)跑馬燈效果的簡單實例。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-05-05

最新評論