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 相关文章推荐
Prototype 学习 工具函数学习($A方法)
Jul 12 Javascript
js下用层来实现select的title提示属性
Feb 23 Javascript
jQuery AJAX 调用WebService实现代码
Mar 24 Javascript
js实现星星打分效果的方法
Jul 05 Javascript
谈谈基于iframe、FormData、FileReader三种无刷新上传文件的方法
Dec 03 Javascript
Javascript实现Array和String互转换的方法
Dec 21 Javascript
Bootstrap 模态框(Modal)插件代码解析
Dec 21 Javascript
微信小程序之picker日期和时间选择器
Feb 09 Javascript
vue-swiper的使用教程
Aug 30 Javascript
解决layui的radio属性或别的属性没显示出来的问题
Sep 26 Javascript
Openlayers实现地图的基本操作
Sep 28 Javascript
浅谈vue.watch的触发条件是什么
Nov 07 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
一个查看session内容的函数
2006/10/09 PHP
php MySQL与分页效率
2008/06/04 PHP
php获取访问者IP地址汇总
2015/04/24 PHP
php检查字符串中是否有外链的方法
2015/07/29 PHP
Laravel 5.3 学习笔记之 错误&amp;日志
2016/08/28 PHP
php mysql procedure实现获取多个结果集的方法【基于thinkPHP】
2016/11/09 PHP
php实现用户注册密码的crypt加密
2017/06/08 PHP
JavaScript移除数组内重复元素的方法
2015/03/18 Javascript
三种AngularJS中获取数据源的方式
2016/02/02 Javascript
JavaScript弹窗基础篇
2016/04/27 Javascript
浅析javascript异步执行函数导致的变量变化问题解决思路
2016/05/13 Javascript
Avalon中文长字符截取、关键字符隐藏、自定义过滤器
2016/05/18 Javascript
利用jQuery插件imgAreaSelect实现图片上传裁剪(同步显示图像位置信息)
2016/12/02 Javascript
微信小程序之拖拽排序(代码分享)
2017/01/21 Javascript
Angular移动端页面input无法输入的解决方法
2017/11/14 Javascript
vue中子组件传递数据给父组件的讲解
2019/01/27 Javascript
element-ui表格合并span-method的实现方法
2019/05/21 Javascript
基于JS实现父组件的请求服务过程解析
2019/10/14 Javascript
ES6对象操作实例详解
2020/05/23 Javascript
基于vue项目设置resolves.alias: '@'路径并适配webstorm
2020/12/02 Vue.js
浅谈Python的垃圾回收机制
2016/12/17 Python
最近Python有点火? 给你7个学习它的理由!
2017/06/26 Python
python去除扩展名的实例讲解
2018/04/23 Python
解决python升级引起的pip执行错误的问题
2018/06/12 Python
深入理解python中sort()与sorted()的区别
2018/08/29 Python
浅析Python 实现一个自动化翻译和替换的工具
2019/04/14 Python
在python中利用pycharm自定义代码块教程(三步搞定)
2020/04/15 Python
文件上传服务器-jupyter 中python解压及压缩方式
2020/04/22 Python
Python 使用SFTP和FTP实现对服务器的文件下载功能
2020/12/17 Python
css3实现顶部社会化分享按钮示例
2014/05/06 HTML / CSS
用HTML5实现鼠标滚轮事件放大缩小图片的功能
2015/06/25 HTML / CSS
基于HTML5+tracking.js实现刷脸支付功能
2020/04/16 HTML / CSS
婴儿鞋,独特的婴儿服装和配件:Zutano
2018/11/03 全球购物
医院护士工作检讨书
2014/10/26 职场文书
垂直极限观后感
2015/06/08 职场文书
三八节祝酒词
2015/08/11 职场文书