javascriptの書く非同期はjsファイル関数をロードします(配列参照をサポートします).

1582 ワード

自分用のjsファイルをロードして、多ファイルをサポートします.
 
  
/**
 * 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;
 }
})();