docs: function loadJS(src, callback, attrs, timeout, fail, complete) {
      if ($.isObject(src)) {
          callback = src.callback;
          attrs = src.attrs;
          timeout = src.timeout;
          fail = src.fail;
          complete = src.complete;
          src = src.src;
          return loadJS(src, callback, attrs, timeout, fail, complete);
      }
      var script = document.createElement('script');
      var done = false;
      if ($.isObject(attrs)) {
          for (var i in attrs) {
              script.setAttribute(i, attrs[i]);
          }
      }
      var urls = getPath(src);
      src = script.src = urls[0];
      script.async = true;
      script.type = 'text/javascript';
      script.charset = defaultConfig.charset;
      complete = $.isFunction(complete) ? complete : emptyFn;
      script.onload = script.onreadystatechange = function(e) {
          e = e || cleanObj
          if (!done && (e.type === 'load' || /loaded|complete|undefined/.test(script.readyState))) {
              done = true;
              removeNode(script);
              mapLoaded[src] = 'loaded';
              $.isFunction(callback) && callback();
              complete('load');
          }
      };
      script.onerror = function() {
          done = true;
          mapLoaded[src] = 'error';
          $.isFunction(fail) && fail();
          complete('error');
      };
      timeout = $.isNumber(timeout) ? timeout : defaultConfig.timeout;
      if (timeout) {
          setTimeout(function() {
              if (!done) {
                  done = true;
                  mapLoaded[src] = 'timeout';
                  complete('timeout');
              }
          }, timeout);
      }
      mapLoaded[src] = 'pending';
      head.insertBefore(script, base);
      return _;
  }