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 写的个性导航菜单
Dec 24 Javascript
Jquery 实现Tab效果 思路是js思路
Mar 02 Javascript
使用cluster 将自己的Node服务器扩展为多线程服务器
Nov 10 Javascript
jquery实现多条件筛选特效代码分享
Aug 28 Javascript
JavaScript中绑定事件的三种方式及去除绑定
Nov 05 Javascript
jQuery实现圣诞节礼物动画案例解析
Dec 25 Javascript
jquery,js简单实现类似Angular.js双向绑定
Jan 13 Javascript
Node学习记录之cluster模块
May 31 Javascript
VUE中v-model和v-for指令详解
Jun 23 Javascript
Vue.js项目模板搭建图文教程
Sep 20 Javascript
javascript将扁平的数据转为树形结构的高效率算法
Feb 27 Javascript
vue3不同环境下实现配置代理
May 25 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
基于mysql的bbs设计(一)
2006/10/09 PHP
php中实现记住密码自动登录的代码
2011/03/02 PHP
php设计模式 Template (模板模式)
2011/06/26 PHP
xml在joomla表单中的应用详解分享
2012/07/19 PHP
整理的一些实用WordPress后台MySQL操作命令
2013/01/07 PHP
一个简单的php加密解密函数(动态加密)
2013/06/19 PHP
php自动加载autoload机制示例分享
2014/02/20 PHP
javascript 对表格的行和列都能加亮显示
2008/12/26 Javascript
jQuery阻止事件冒泡具体实现
2013/10/11 Javascript
js中的caller和callee属性介绍和例子
2014/06/07 Javascript
webapp框架AngularUI的demo改造之路
2014/12/21 Javascript
JS实现浏览器状态栏文字从右向左弹出效果代码
2015/10/27 Javascript
解析ajaxFileUpload 异步上传文件简单使用
2016/12/30 Javascript
Vue开发中整合axios的文件整理
2017/04/29 Javascript
IScroll5实现下拉刷新上拉加载的功能实例
2017/08/11 Javascript
VUE前端cookie简单操作
2017/10/17 Javascript
微信小程序自定义导航教程(兼容各种手机)
2018/12/12 Javascript
在Node.js下运用MQTT协议实现即时通讯及离线推送的方法
2019/01/24 Javascript
vue 实现Web端的定位功能 获取经纬度
2019/08/08 Javascript
Vue通过for循环随机生成不同的颜色或随机数的实例
2019/11/09 Javascript
vue keep-alive列表页缓存 详情页返回上一页不刷新,定位到之前位置
2019/11/26 Javascript
Nuxt默认模板、默认布局和自定义错误页面的实现
2020/05/11 Javascript
Python中设置变量访问权限的方法
2015/04/27 Python
Python实现查找匹配项作处理后再替换回去的方法
2017/06/10 Python
Python操作SQLite数据库的方法详解【导入,创建,游标,增删改查等】
2017/07/11 Python
Python中一行和多行import模块问题
2018/04/01 Python
pandas 根据列的值选取所有行的示例
2018/11/07 Python
Django正则URL匹配实现流程解析
2020/11/13 Python
英国网上购买门:Direct Doors
2018/06/07 全球购物
奥地利婴儿用品和玩具购物网站:baby-markt.at
2020/01/26 全球购物
物流管理专业职业生涯规划书
2014/01/06 职场文书
自我介绍演讲稿
2014/01/15 职场文书
《水乡歌》教学反思
2014/04/24 职场文书
nginx配置proxy_pass中url末尾带/与不带/的区别详解
2021/03/31 Servers
MySQL中IF()、IFNULL()、NULLIF()、ISNULL()函数的使用详解
2021/06/26 MySQL
Python使用Web框架Flask开发项目
2022/06/01 Python