javascript - js有没有可能一个函数执行到一半的时候执行另一个函数?
迷茫
迷茫 2017-04-11 10:54:10
[JavaScript讨论组]
迷茫
迷茫

业精于勤,荒于嬉;行成于思,毁于随。

全部回复(5)
天蓬老师

你就想象一下,js是要执行一个语句的队列,ajax加载成功了,他的回调函数是要插入到队列的最后面的,所以要等引擎执行到他那才会执行。

迷茫

js是单线程的。肯定是先执行myFun呗

阿神

ajax设置了同步就按顺序执行,设置为异步就两个一起执行

ringa_lee

写了个例子

$.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了

迷茫

你需要了解下 什么叫event loop
js有没有可能一个函数执行到一半的时候执行另一个函数?当然可能
myFun可能也有异步的部分,或者还可能是个generator函数。

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号