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 相关文章推荐
列表内容的选择
Jun 30 Javascript
在百度知道团队中快速审批新成员的js脚本
Feb 02 Javascript
JS根据生日算年龄的方法
May 05 Javascript
js实现数组转换成json
Jun 26 Javascript
jQuery Timelinr实现垂直水平时间轴插件(附源码下载)
Feb 16 Javascript
利用js+css+html实现固定table的列头不动
Dec 08 Javascript
Vue-resource实现ajax请求和跨域请求示例
Feb 23 Javascript
浅谈Angular路由复用策略
Oct 04 Javascript
vue使用axios实现文件上传进度的实时更新详解
Dec 20 Javascript
原生js实现轮播图特效
May 04 Javascript
Ant Design的Table组件去除
Oct 24 Javascript
vue 根据选择的月份动态展示日期对应的星期几
Feb 06 Vue.js
关于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
S900/ ETON E1-XM 收音机
2021/03/02 无线电
PHP文本数据库的搜索方法
2006/10/09 PHP
PHP实现文件安全下载
2006/10/09 PHP
PHP中include和require的区别实例分析
2017/05/07 PHP
ThinkPHP5&amp;5.1框架关联模型分页操作示例
2019/08/03 PHP
Yii框架安装简明教程
2020/05/15 PHP
(currentStyle)javascript为何有时用style得不到已设定的CSS的属性
2007/08/15 Javascript
找到了一篇jQuery与Prototype并存的冲突的解决方法
2007/08/29 Javascript
jQuery EasyUI API 中文文档 DateTimeBox日期时间框
2011/10/16 Javascript
js对文章内容进行分页示例代码
2014/03/05 Javascript
基于jquery实现瀑布流布局
2020/06/28 Javascript
jQuery Mobile页面返回不需要重新get
2016/04/26 Javascript
深入理解JS addLoadEvent函数
2016/05/20 Javascript
jQuery插件Easyui设置datagrid的pageNumber导致两次请求问题的解决方法
2016/08/06 Javascript
利用Angular.js限制textarea输入的字数
2016/10/20 Javascript
用Angular实时获取本地Localstorage数据,实现一个模拟后台数据登入的效果
2016/11/09 Javascript
AngularJs表单校验功能实例代码
2017/02/09 Javascript
利用vue.js插入dom节点的方法
2017/03/15 Javascript
vue watch普通监听和深度监听实例详解(数组和对象)
2018/08/16 Javascript
Vue.js的复用组件开发流程完整记录
2018/11/29 Javascript
ES6入门教程之变量的解构赋值详解
2019/04/13 Javascript
js实现for循环跳过undefined值示例
2019/07/02 Javascript
Vue-CLI 项目在pycharm中配置方法
2019/08/30 Javascript
使用JavaScript获取扫码枪扫描得到的条形码的思路代码详解
2020/06/10 Javascript
[01:05:40]2014 DOTA2国际邀请赛中国区预选赛 5 23 CIS VS DT第三场
2014/05/24 DOTA
在Python中编写数据库模块的教程
2015/04/29 Python
Python安装lz4-0.10.1遇到的坑
2018/05/20 Python
解决python2 绘图title,xlabel,ylabel出现中文乱码的问题
2019/01/29 Python
python opencv实现证件照换底功能
2019/08/19 Python
HTML5 video循环播放多个视频的方法步骤
2020/08/06 HTML / CSS
使用layui实现左侧菜单栏及动态操作tab项的方法
2020/11/10 HTML / CSS
优秀广告词大全
2014/03/19 职场文书
教师个人工作总结范文2014
2014/11/10 职场文书
幼儿园元旦主持词
2015/07/06 职场文书
导游词之新疆尼雅遗址
2019/10/16 职场文书
MySQL实例精讲单行函数以及字符数学日期流程控制
2021/10/15 MySQL