javascript寫的非同步載入js檔案函數(支援數組傳參)_javascript技巧

來源:互聯網
上載者:User

自己用的載入js檔案,支援多檔案,不相容ie

複製代碼 代碼如下:

/**
 * 載入js檔案
 * @param  {string || array}   url   js路徑
 * @param  {Function} fn      載入完成後回調
 * @return {object}           game對象
 * @example
 * getScript("url.js",fn)
 * getScript(["url-1.js","url-2.js"],fn)
 */
game.getScript = (function() {
 var cache = {};//內部緩衝下url,下次則不請求
 return function(url, fn) {
  if ("string" === typeof(url)) {
   url = [url]; //如果不是數組帶個套
  };
  var i = 0,//迴圈起
   ok = 0,//載入成功幾個js
   len = url.length,//一共幾個js
   head = document.getElementsByTagName("head")[0],
   js, _url,
   create = function(url) {//建立js
    js = document.createElement("script");
    js.type = "text/javascript";
    js.src = url;
    head.appendChild(js);
    return js;
   };
  for (; i < len;) {
   if (cache[encodeURIComponent((_url = url[i++]))]) {//如果載入過
    (++ok >= len && fn) && fn();//如果載入完所有的js則執行回調
    continue;
   }
   cache[encodeURIComponent(_url)] = !0;//設定緩衝
   js = create(_url);//建立js
   fn && (js.onload = function() {
    if (++ok >= len) {//如果載入完所有的js則執行回調
     fn();
    }
   });
  };
  head = js = _url = create  = null;
  return this;
 }
})();

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.