细说event-loop

图解js运行过程

console.log('Hi');
setTimeout(function cb1() { 
    console.log('cb1');
}, 5000);
console.log('Bye');
  • 动态示意图
    image
  • 分解过程
  1. 第一步
    image
  2. 第二步
    image
    3.第三步
    image
    4.第四步
    image
  3. 第五步
    image
  4. 第六步
    image
  5. 第七步
    image
  6. 第八步
    image
  7. 第九步
    image
  8. 第十步
    image
  9. 第十一步
    image
  10. 第十二步
    image
  11. 第十三步
    image
  12. 第十四步
    image
  13. 第十五步
    image
  14. 第十六步
    image

扩展

  1. 通过了解js函数的运行过程,我们可以更好的理解在监听页面滚动事件、窗口大小改动因为它们会产生大量的函数调用在callback queue(回调队列里)等待被拉取到Call Stack栈里执行,容易阻塞页面、造成假死。使用throttle函数或debounce函数可以减少回调函数的数量,起到优化的作用。
  2. setTimeout的延迟触发并不会一定精确,因为回调栈里的队列为空时,才会去拉取setTimeout的函数执行,假设有的函数执行比价耗时,延迟执行的时间到了setTimeout函数也不一定会执行。

参考链接

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值