varimge=newImage();vararr=newArray(8);varopp=0;functiondigui(opp){imge.src="这里在网上必须有一个图片的链接地址不然测试不出来";imge.onload=function(){opp++;if(opp
2 回答
慕桂英3389331
TA贡献2036条经验 获得超8个赞
varopp=0;functiondigui(opp){opp++;if(opp<8){digui(opp);}console.log(opp);}digui(opp);//输出的确实是8.7.6.5.4.3.2.1
牛魔王的故事
TA贡献1830条经验 获得超3个赞
简单而言,就是你把实现递归的模式给改了,传统的实现是这样的>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个执行结果中,可以看出,同步执行时确实是传统递归执行,而在异步时,根本就不是传统递归执行。
添加回答
举报
0/150
提交
取消