扫码关注官方订阅号
业精于勤,荒于嬉;行成于思,毁于随。
你就想象一下,js是要执行一个语句的队列,ajax加载成功了,他的回调函数是要插入到队列的最后面的,所以要等引擎执行到他那才会执行。
js是单线程的。肯定是先执行myFun呗
ajax设置了同步就按顺序执行,设置为异步就两个一起执行
写了个例子
$.ajax("//jsfiddle.net/echo/json/?delay=2").fail(()=>console.log(`Ajax Done: ${new Date().toISOString()}`)) function myFunc(){ var now = Date.now(); console.log(`myFunc start: ${new Date().toISOString()}`); //setTimeout(function(){ while(Date.now() - now < 5000){ // do nothing... } console.log(`myFunc done: ${new Date().toISOString()}`); // }, 100); } myFunc();
使用了jsfiddle的一个API,因为跨域,所以最后会出错,但是延迟的时间是对的,所以就用fail将就一下吧...使用while来模拟js耗时程序结果是,ajax先执行,毕竟是在myFunc前面;但是myFunc先结束,而且ajax的输出实际上等了5秒,也就是说那个while把ajax的回调block了
while
你需要了解下 什么叫event loopjs有没有可能一个函数执行到一半的时候执行另一个函数?当然可能myFun可能也有异步的部分,或者还可能是个generator函数。
event loop
js有没有可能一个函数执行到一半的时候执行另一个函数?
微信扫码关注PHP中文网服务号
QQ扫码加入技术交流群
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
PHP学习
技术支持
返回顶部
你就想象一下,js是要执行一个语句的队列,ajax加载成功了,他的回调函数是要插入到队列的最后面的,所以要等引擎执行到他那才会执行。
js是单线程的。肯定是先执行myFun呗
ajax设置了同步就按顺序执行,设置为异步就两个一起执行
写了个例子
使用了jsfiddle的一个API,因为跨域,所以最后会出错,但是延迟的时间是对的,所以就用fail将就一下吧...
使用
while来模拟js耗时程序结果是,ajax先执行,毕竟是在myFunc前面;但是myFunc先结束,而且ajax的输出实际上等了5秒,也就是说那个while把ajax的回调block了
你需要了解下 什么叫
event loopjs有没有可能一个函数执行到一半的时候执行另一个函数?当然可能myFun可能也有异步的部分,或者还可能是个generator函数。