ajax异步加载js,关于jquery 延迟,异步加载js 再执行并初始化

脚本添加应该是这样的吧

onload函数将在页面资源都被加载完成后执行(包括图片,html,css,JS脚本)

那么当a.js被加载执行的时候,此时onload还不会有值,那么下面的代码块将被执行

window.onload = function(){ //INIT_LOAD_JS

return loadInit();

}

此时window.onload将绑定匿名函数,我们假设其函数名为 INIT_LOAD_JS

b.js在a.js后面加载

此时onload已经有绑定的函数对象,那么下面的代码块加被执行

var fn = window.onload;

window.onload = function(){ //INIT_LOAD_JS_RUN

fn().done(loadInit);

};

当load事件发生时,INIT_LOAD_JS_RUN函数将被执行,分别去加载aa.js和bb.js并被执行

那么正常的流程走下来;

在b.js中执行loadInit函数应该没有问题的

那么问题就在于

var $promise = $.when($Deferred_01()).then($Deferred_02());

要这样写

var $promise = $.when($Deferred_01()).then(function(){

return $Deferred_02();

});

一个完整的例子

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(function(){

return $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

/**

* Created by akong on 16/2/26.

*/

(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();

};

}

})()

aa.js

function AA(){

console.log('~~~AAA~~~');

}

bb.js

function BB(){

var aa=new AA();

console.log('~~~BB~~~');

}

HTML:

运行后控制台将输出

~~~AAA~~~

~~~BB~~~

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值