问题是关于异步加载js
//a.js
(function(){
function loadInit(){
var $Deferred_01 = function(){
return $.getScript('aa.js')
}
var $Deferred_02 = function(){
return $.getScript('bb.js') //依赖aa.js
}
var $promise = $.when($Deferred_01()).then($Deferred_02());
return $promise;
}
var windLoadFn = window.onload;
if(windLoadFn !=null){
window.onload = function(){
windLoadFn();
return loadInit();
}
}else{
window.onload = function(){
return loadInit();
}
}
})()
//b.js
(function(){
function loadInit(){
var bb = new BB() //依赖 bb.js;
}
if(window.onload!=null){
var fn = window.onload;
window.onload = function(){
fn().done(loadInit);
};
}else{
window.onload = function(){
loadInit();
};
}
})()
//页面加载是
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="aa.js"></script>
<script type="text/javascript" src="bb.js"></script>
我遇到的问题是在bb.js执行总有找不到aa.js 的 对象 或者 bb的 对象 不能 new AA() 或 new BB()初始化
脚本添加应该是这样的吧
onload函数将在页面资源都被加载完成后执行(包括图片,html,css,JS脚本)
那么当a.js被加载执行的时候,此时onload还不会有值,那么下面的代码块将被执行
此时window.onload将绑定匿名函数,我们假设其函数名为 INIT_LOAD_JS
b.js在a.js后面加载
此时onload已经有绑定的函数对象,那么下面的代码块加被执行
当load事件发生时,INIT_LOAD_JS_RUN函数将被执行,分别去加载aa.js和bb.js并被执行
那么正常的流程走下来;
在b.js中执行loadInit函数应该没有问题的
那么问题就在于
要这样写
一个完整的例子
a.js
b.js
aa.js
bb.js
HTML:
运行后控制台将输出
~~~AAA~~~
~~~BB~~~