enent-loop

## js语言特点

单线程  解释性语言

## event-loop

事件循环机制由三部分组成

调用栈 微任务队列 消息队列

+ event-loop开始的时候 会从全局一行一行的执行 遇到函数调用  会压入到调用栈中 被压入的函数称之为帧  当函数返回后会从调用栈中弹出


        function fun1(){

            console.log(1)

        }

        function fun2(){

            console.log(2)

            fun1()

            console.log(3)

        }

        fun2()


 结果为: 2  1  3

 + js中的异步操作 比如fetch setTimeout setInterval 压入到调用栈中的时候 里面的消息会进入到消息队列中去  消息队列中会等到调用栈清空后再执行



         function fun1(){

            console.log(1)

        }

        function fun2(){

            setTimeout(()=>{

                console.log(2)

            },0)

            fun1()

            console.log(3)

        }

        fun2()

    结果为: 1 3 2

+ promise async await的异步操作的时候会加入到微任务中去 会在调用栈清空的时候立即执行   调用栈中加入的微任务会立马执行



        var p = new Promise(resolve => {

            console.log(4)

            resolve(5)

        })

        function fun1() {

            console.log(1)

        }

        function fun2() {

            setTimeout(() => {

                console.log(2)

            }, 0)

            fun1()

            console.log(3)

            p.then(resolve => {

                console.log(resolve)

            })

        }

        fun2()

结果: 4 1 3 5 2

+ 面试题

        let p = new Promise(resolve => {
            console.log(1)
            setTimeout(() => {
                console.log(2)
                resolve(3)
                console.log(4)
            }, 0)
        })
        setTimeout(() => {
            console.log(5)
        }, 0)
        p.then(resolve => {
            console.log(resolve)
            console.log(6)
        })
        console.log(7)

结果:1 7 2 4 3 6 5

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值