javascript写的异步加载js文件函数(支持数组传参)
自己用的加载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(){
varcache={};//内部缓存下url,下次则不请求
returnfunction(url,fn){
if("string"===typeof(url)){
url=[url];//如果不是数组带个套
};
vari=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);
returnjs;
};
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;
returnthis;
}
})();