为了账号安全,请及时绑定邮箱和手机立即绑定

javascript中回调和递归并用的问题

javascript中回调和递归并用的问题

侃侃无极 2019-04-23 15:12:52
varimge=newImage();vararr=newArray(8);varopp=0;functiondigui(opp){imge.src="这里在网上必须有一个图片的链接地址不然测试不出来";imge.onload=function(){opp++;if(opp
查看完整描述

2 回答

?
慕工程0101907

TA贡献1887条经验 获得超5个赞

varopp=0;
functiondigui(opp){
opp++;
if(opp<8){
digui(opp);
}
console.log(opp);
}
digui(opp);
//输出的确实是8.7.6.5.4.3.2.1
                            
查看完整回答
反对 回复 2019-04-23
?
青春有我

TA贡献1784条经验 获得超8个赞

简单而言,就是你把实现递归的模式给改了,传统的实现是这样的
>1开始
>---2开始
>------3开始
>------3结束
>---2结束
>1结束
而的你实现改成了
>1开始
>1结束
>---2开始
>---2结束
>------3开始
>------3结束
为什么会成这个样,是因为onload这个事件的触发,onload事件触发是在加载图片完成后才执行的。
也就是“1开始”后执行时并不会马上触发“2开始”的相关逻辑,而是要等待图片加载完成后,才会触发“2开始”,而这时在等待图片加载时,“1结束”部分已经执行完毕
functiondigui(opp){
//开始
console.log(opp+'start');
imge.src="这里在网上必须有一个图片的链接地址不然测试不出来";
imge.onload=function(){
opp++;
if(oppconsole.log("第一层"+opp);
digui(opp);
}
console.log(opp);
}
//结束
console.log(opp+'end');
}
digui(opp);
而基于楼上@jsven的回答
varopp=0;
functiondigui(opp){
console.log(opp+'start');
opp++;
if(opp<8){
digui(opp);
}
console.log(opp);
console.log(opp+'end');
}
digui(opp);
从这2个执行结果中,可以看出,同步执行时确实是传统递归执行,而在异步时,根本就不是传统递归执行。
                            
查看完整回答
反对 回复 2019-04-23
  • 2 回答
  • 0 关注
  • 263 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信