javascript写的异步加载js文件函数(支持数组传参)


Posted in Javascript onJune 07, 2014

自己用的加载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;
 }
})();
Javascript 相关文章推荐
JQuery 操作select标签实现代码
May 14 Javascript
js模拟select下拉菜单控件的代码
May 08 Javascript
一个简单的弹性返回顶部JS代码实现介绍
Jun 09 Javascript
sencha touch 模仿tabpanel导航栏TabBar的实例代码
Oct 24 Javascript
Jquery实现textarea根据文本内容自适应高度
Apr 03 Javascript
全面了解js中的script标签
Jul 04 Javascript
jQuery实现的右下角广告窗体跟随效果示例
Sep 16 Javascript
Canvas + JavaScript 制作图片粒子效果
Feb 08 Javascript
node.js调用Chrome浏览器打开链接地址的方法
May 17 Javascript
React Router V4使用指南(精讲)
Sep 17 Javascript
vue按需加载实例详解
Sep 06 Javascript
在webstorm中配置less的方法详解
Sep 25 Javascript
关于JavaScript命名空间的一些心得
Jun 07 #Javascript
javascript随机之洗牌算法深入分析
Jun 07 #Javascript
ECMAScript6的新特性箭头函数(Arrow Function)详细介绍
Jun 07 #Javascript
js中的caller和callee属性介绍和例子
Jun 07 #Javascript
javascript中拼接HTML字符串的最快、最好的方法
Jun 07 #Javascript
javascript在网页中实现读取剪贴板粘贴截图功能
Jun 07 #Javascript
JavaScript异步回调的Promise模式封装实例
Jun 07 #Javascript
You might like
PHP数字和字符串ID互转函数(类似优酷ID)
2014/06/30 PHP
PHP中遇到BOM、编码导致json_decode函数无法解析问题
2014/07/02 PHP
PHP中使用substr()截取字符串出现中文乱码问题该怎么办
2015/10/21 PHP
关于IE7 IE8弹出窗口顶上
2008/12/22 Javascript
javascript 处理事件绑定的一些兼容写法
2009/12/24 Javascript
腾讯与新浪的通过IP地址获取当前地理位置(省份)的接口
2010/07/26 Javascript
jquery click([data],fn)使用方法实例介绍
2013/07/08 Javascript
js文本框输入点回车触发确定兼容IE、FF等
2013/11/19 Javascript
无闪烁更新网页内容JS实现
2013/12/19 Javascript
JS控制图片等比例缩放的示例代码
2013/12/24 Javascript
jQuery拖拽 &amp; 弹出层 介绍与示例
2013/12/27 Javascript
AngularJS身份验证的方法
2016/02/17 Javascript
微信小程序 免费SSL证书https、TLS版本问题的解决办法
2016/12/14 Javascript
在vue项目中使用md5加密的方法
2018/09/14 Javascript
用Angular实现一个扫雷的游戏示例
2020/05/15 Javascript
Vue自定义表单内容检查rules实例
2020/10/30 Javascript
解决iView Table组件宽度只变大不变小的问题
2020/11/13 Javascript
python数据封装json格式数据
2018/03/04 Python
numpy数组广播的机制
2019/07/12 Python
python如何从文件读取数据及解析
2019/09/19 Python
python使用socket实现的传输demo示例【基于TCP协议】
2019/09/24 Python
linux 下python多线程递归复制文件夹及文件夹中的文件
2020/01/02 Python
python统计字符的个数代码实例
2020/02/07 Python
资深生产主管自我评价
2013/09/22 职场文书
客服服务心得体会
2013/12/30 职场文书
2014年五一劳动节社区活动总结
2014/04/14 职场文书
写得不错的求职信范文
2014/07/11 职场文书
个人总结与自我评价
2014/09/18 职场文书
办公室管理规章制度
2015/08/04 职场文书
教学副校长工作总结
2015/08/13 职场文书
维护民族团结心得体会2016
2016/01/15 职场文书
职业规划从高考志愿专业选择开始
2019/08/08 职场文书
浅谈@Value和@Bean的执行顺序问题
2021/06/16 Java/Android
使用@Value值注入及配置文件组件扫描
2021/07/09 Java/Android
厉害!这是Redis可视化工具最全的横向评测
2021/07/15 Redis
JS setTimeout与setInterval的区别
2022/04/20 Javascript