JavaScript系列002——理解JS事件循环

事件循环: JS是单线程的,但是又需要一种机制来处理多个块的执行,

                 且执行每个块时仅调用js引擎,这种机制称为事件循环,与事件绑定概念没有关系

        事件循环分为3部分:

            - 主线程

            - 宏队列

            - 微队列

                异步代码都会被丢进宏/微队列

        宏任务: script, setTimeout, setInterval, setImmediate,  I/O, MutationObserve, UI rendering

        微任务: process.nextTick, promise.then(), object.observe, MutationObserver

        主线程只有一个,且执行顺序为:

            - 1 先执行主线程

            - 2 遇到宏任务放到宏队列

            - 3 遇到微任务放到微队列

            - 4 主线程执行完毕

            - 5 执行微队列,微队列执行完毕

            - 6 执行一次宏队列的任务,执行完毕

            - 7 执行微队列,执行完毕

            - 8 依次循环...(微队列 > 宏队列 > 微队列 > 宏队列)

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>理解JS事件循环</title>
    <script>      
    // 举例
    Promise.resolve().then(() => {   // then() 微任务
        console.log('Promise1')   
        setTimeout(() => {          // setTimeout 宏任务
            console.log('setTimeout2')
        },0)
    })
    setTimeout(() => {
        console.log('setTimeout1')
        Promise.resolve().then(() => {
            console.log('Promise2')
        }) 
    })
    console.log('start')   // 主线程
    
    // 执行结果
    // start
    // Promise1
    // setTimeout1
    // Promise2
    // setTimeout2
    </script>
</head>
<body>

     
</body>
</html>

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值