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 相关文章推荐
js里取容器大小、定位、距离等属性搜集整理
Aug 19 Javascript
浅析jQuery1.8的几个小变化
Dec 10 Javascript
js获取滚动距离的方法
May 30 Javascript
javascript中offset、client、scroll的属性总结
Aug 13 Javascript
从重置input file标签中看jQuery的 .val() 和 .attr(“value”) 区别
Jun 12 Javascript
老生常谈 js中this的指向
Jun 30 Javascript
js实现非常棒的弹出div
Oct 06 Javascript
Bootstrap整体框架之JavaScript插件架构
Dec 15 Javascript
微信小程序 跳转传参数与传对象详解及实例代码
Mar 14 Javascript
原生js实现Flappy Bird小游戏
Dec 24 Javascript
微信小程序之左右布局的实现代码
Dec 13 Javascript
django简单的前后端分离的数据传输实例 axios
May 18 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实现查看邮件是否已被阅读的方法
2013/12/03 PHP
php通过sort()函数给数组排序的方法
2015/03/18 PHP
非常重要的php正则表达式详解
2016/01/04 PHP
php实现微信支付之退款功能
2018/05/30 PHP
php设计模式之中介者模式分析【星际争霸游戏案例】
2020/03/23 PHP
javascript关于继承的用法汇总
2014/12/20 Javascript
JS实现一个按钮的方法
2015/02/05 Javascript
详谈javascript中的cookie
2015/06/03 Javascript
每天一篇javascript学习小结(Function对象)
2015/11/16 Javascript
Javascript实现的SHA-256加密算法完整实例
2016/02/02 Javascript
JavaScript中String对象的方法介绍
2017/01/04 Javascript
js实现简易垂直滚动条
2017/02/22 Javascript
ionic2中使用自动生成器的方法
2018/03/04 Javascript
Angular利用内容投射向组件输入ngForOf模板的方法
2018/03/05 Javascript
Nest.js环境变量配置与序列化详解
2021/02/21 Javascript
vite2.0+vue3移动端项目实战详解
2021/03/03 Vue.js
python编程实现归并排序
2017/04/14 Python
python编程使用协程并发的优缺点
2018/09/20 Python
python解析含有重复key的json方法
2019/01/22 Python
利用pyshp包给shapefile文件添加字段的实例
2019/12/06 Python
Python tkinter 下拉日历控件代码
2020/03/04 Python
查看keras各种网络结构各层的名字方式
2020/06/11 Python
五分钟学会怎么用Pygame做一个简单的贪吃蛇
2021/01/06 Python
css3学习心得分享
2013/08/19 HTML / CSS
纯CSS3实现滚动的齿轮动画效果
2014/06/05 HTML / CSS
分享29个基于Bootstrap的HTML5响应式网页设计模板
2015/11/19 HTML / CSS
工业自动化毕业生自荐信范文
2014/01/04 职场文书
欢送退休感言
2014/02/08 职场文书
大学军训感言400字
2014/03/11 职场文书
企业承诺书格式
2014/05/21 职场文书
物流管理系毕业生求职信
2014/06/03 职场文书
向国旗敬礼学生寄语大全
2014/09/30 职场文书
简历自我评价模板
2015/03/11 职场文书
公司员工宿舍管理制度
2015/08/03 职场文书
MySQL常见优化方案汇总
2022/01/18 MySQL
使用pd.merge表连接出现多余行的问题解决
2022/06/16 Python