JS异步全解01:初识event-loop 事件循环

什么是event-loop

  • js是单线程,异步需要基于回调来实现
  • event-loop就是异步回调的实现原理

例如setTimeout

console.log(1);
setTimeout(function cb1() {
  console.log(2);
}, 0);

console.log(3)
1
3
2

js代码是如何执行的

在这里插入图片描述

  1. 从前往后,一行行放在call stack里执行
    如果一行报错,下面的代码停止执行
  2. 先执行完所有同步代码,再执行异步代码
    遇到异步先放入异步队列,等待时机
  3. 同步代码一旦执行完call-stack为空,就触发event-loop事件循环机制
    1. event-loop不断循环,去回调函数队列中判断是否存在回调函数
    2. 例如web-api中的定时器到时间后,就将回调函数推入这个队列中
    3. event-loop判断存在函数就出队执行这个函数
    4. 函数体中的内容被放入call-stack中执行
    5. 重复以上步骤

DOM事件和Event-loop

<body>
    <button onclick="fn()">提交</button>
</body>
<script>
    console.log(1);
    function fn() {
        console.log(2);
    }
    console.log(3);
</script>

例如以上DOM点击事件
本质上也是基于event-loop的回调,只是触发的时机不一样
定时器是通过时间触发,DOM是通过用户点击触发

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值