even loop事件循环机制

JS是单线程的;
eventLoop就是沟通JS引擎线程和浏览器线程的桥梁,也是浏览器实现异步非阻塞模型的关键。

异步(setTimeout,ajax)DOM事件 回调,都是基于event loop

说起异步就需要了解下微任务宏任务了

属于微任务的事件包括但不限于以下几种:
  • Posmise.then
  • MutationObserver
  • process.nextTick
属于宏任务的事件包括但不限于以下几种:
  • setTimeout
  • setInterval
  • setImmediate
  • MessageChannel
  • resquestAnimationFrame
  • I/O
  • UI交互事件

event loop(事件循环/事件轮询)的机制(图解及执行步骤)

在这里插入图片描述

  1. 同步代码,一行一行的放在Call Stack执行
  2. 执行过程中遇到微任务,把他放入微任务队列中,遇到宏任务把他放入宏任务队列中。;
  3. 时机到了,就移动到Callback Queue(准备队列同步任务执行完后执行)
  4. 如Call Stack为空(即同步代码执行完)Event Loop开始工作
  5. 轮询查找Callback Queue,如有则移动Call Stack执行
  6. 然后继续轮询查找(像永动机一样)

JS是单线程运行的,异步要基于回调来实现,event loop就是异步回调的实现原理

/练习理解
        setTimeout(() => console.log(1), 0);

        new Promise(function (resolve, reject) {
            console.log(2); 
            //resolve(1);
            setTimeout(function(){
                console.log(3);
                resolve(1);
            }, 0);
        })
        .then(() => {
            console.log(4)
        })

        console.log(5)

        setTimeout(() => console.log(6), 1000);

        setTimeout(() => console.log(7), 0);

        setTimeout(() => console.log(8), 1000);
输出为 25134768
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

蹦跶哒哒哒

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值