汐华初流乃260 2022-04-21 17:40 采纳率: 100%
浏览 35
已结题

为何打印-1而不是0

len最后是0但为什么定时器打印出-1呢,完全不懂希望得到解答谢谢

img

  • 写回答

2条回答 默认 最新

  • amazingTU 2022-04-21 18:06
    关注

    你没发现打印了5次 -1吗?setTimeout(()=>{},0)这也是一个很经典的面试题,考点是同步异步以及js的宏任务和微任务。当然这里可以理解简单点,就是js基于事件循环机制执行的,优先执行同步任务,异步任务会存放在任务队列里面,等同步执行完毕后再去执行异步。这里的setTimeout就是异步,当执行到这里的时候会将起存放(这里存放的是整个执行逻辑(len--)),继续执行while里面的同步任务。所以等同步任务执行完毕后(执行了5次),此时任务队列里面也就有了5个等待执行的异步任务,现在就开始执行异步任务了,此时len已经是0了,所以结果就是5次 -1。这里要说明一下,异步任务不会相互干扰,每个异步拿到的都是0.

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 5月16日
  • 已采纳回答 5月8日
  • 创建了问题 4月21日

悬赏问题

  • ¥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 来使用补偿体积来保持压缩比不变