JavaScript技术

javascript的微任务和宏任务

2022-08-29  本文已影响0人  glassUp

为什么javascript是单线程?

因为javascript作为浏览器脚本语言一定是单线程的,如果javascript同时有两个线程,一个线程在某个dom节点上进行添加内容,一个线程在dom上删除内容,那么浏览器究竟以哪个线程为准?

javascript是单线程,怎么执行异步?

单线程就意味着上一个任务执行完成,才能执行下一个任务,所以我们需要了解javascript的执行流程

js的执行流程.jpg
引用js中的宏任务与微任务 - 知乎 (zhihu.com)
(图左:同步任务)
(图右:事件循环)【宏任务,微任务】
微任务 promise.then() ==> then里面的才是微任务
宏任务 setTimeout,setInterval....

执行流程

同步任务==>微任务==>宏任务

流程图.jpg
图解: 先执行完所有的同步任务,再去执行所有的微任务,最后执行宏任务,执行完成后再事件循环,有微任务的话,再执行完成所有的微任务,然后去执行宏任务,依次事件循环

问题

1.输出多少(几秒输出几)

for(var i = 0;i < 3; i++){
    setTimeout(function(){
          alert(i)
    },1000*i)
}

答案:3 3 3
解题思路:同步任务三次for循环,里面的事件循环中的宏任务是不执行的,i=3;
同步任务执行完成后,开始执行事件循环中的三个宏任务,定时器

2.输出顺序

setTimeout(function(){
      console.log('1')
})

new Promise(resolve=>{
      console.log('1promise')
      resolve()
}).then(()=>{
      console.log('微任务1')
}).then(()=>{
      console.log('微任务2')
})

console.log('2')
答案:1promise      2        微任务1       微任务2           1
上一篇下一篇

猜你喜欢

热点阅读