JS高级:事件循环-队列-一些相关面试题

进程与线程

 javascript是单线程的

 

 写一下出现定时器时候的处理过程

现在栈结构中,全局上下文处理13-15行代码

遇到settimeout时,创建 settimeout执行上下文,然后调用另外一个线程去计时,此时可看做此上下文完成,消除 settimeout执行上下文

最后全局上下文为空

当定时结束,会在事件队列中放入任务,这个地方是 回调函数

全局执行上下文会查看队列中是否有任务,如果有就拿过来执行

 

 

宏任务与微任务

    setTimeout(()=>{
      console.log(111);
    },0)


    new Promise((resovle,reject)=>{
      console.log(11111);
      console.log(22222);
      resovle(00000)
      console.log(33333);
    }).then((res)=>{
      console.log(res);

    })

    console.log(44444 );

这个地方settimeout和than函数都会放入时间队列,故他们两个是执行最后的

但是放入的队列不同

settimeout是宏任务macrotask,会加入宏任务队列。than是微任务micrsoft,加入微任务队列

 现在有一个问题,当栈中的全局上下文是空的时候,宏任务队列和微任务队列都有任务,应该这么操作?

机制是,将微任务全部做完,再去做宏任务

 看个面试题

代码顺序是从左到右

 

 面试题2

 面试题3

 这里 then1-res和getdata end这两行其实是微任务,因为await返回了一个promise,后面的代码相当与调用了then

面试题4

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值