len最后是0但为什么定时器打印出-1呢,完全不懂希望得到解答谢谢
2条回答 默认 最新
- amazingTU 2022-04-21 18:06关注
你没发现打印了5次 -1吗?setTimeout(()=>{},0)这也是一个很经典的面试题,考点是同步异步以及js的宏任务和微任务。当然这里可以理解简单点,就是js基于事件循环机制执行的,优先执行同步任务,异步任务会存放在任务队列里面,等同步执行完毕后再去执行异步。这里的setTimeout就是异步,当执行到这里的时候会将起存放(这里存放的是整个执行逻辑(len--)),继续执行while里面的同步任务。所以等同步任务执行完毕后(执行了5次),此时任务队列里面也就有了5个等待执行的异步任务,现在就开始执行异步任务了,此时len已经是0了,所以结果就是5次 -1。这里要说明一下,异步任务不会相互干扰,每个异步拿到的都是0.
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报 编辑记录
悬赏问题
- ¥30 设计一个图形用户界面来控制你机械臂的运动
- ¥30 3d打印机无法识别到SD卡,如何解决?(相关搜索:格式化)
- ¥15 RPG游戏架构设计和开发方法
- ¥15 python 计算股权结构
- ¥30 为什么会失败呢,该如何调整
- ¥15 前端返回pdf时不显示内容
- ¥50 如何在不能联网影子模式下的电脑解决usb锁
- ¥20 服务器redhat5.8网络问题
- ¥15 如何利用c++ MFC绘制复杂网络多层图
- ¥20 要做柴油机燃烧室优化 需要保持压缩比不变 请问怎么用AVL fire ESE软件里面的 compensation volume 来使用补偿体积来保持压缩比不变