写写前端 JS 的 宏任务,微任务,

2020-11-09  本文已影响0人  lazy_tomato

START

相关文章

面试题

console.log('start')

setTimeout(()=>{
    console.log('timeout')
},0)

new Promise((resolve,reject)=>{
    resolve()
    console.log('resolve')
}).then(()=>{
    console.log('then')
})

console.log('end')
start
resolve
end
then
timeout

同步异步

  首先,定时器异步的,按照js从上到下运行机制,一开始运行定时器,因为是异步的,所以就会将定时器中的函数放入Event Table(简单来看就是一个容器)中

   然后继续向下执行,运行到`console.log('我是懒番茄')`,同步任务就放到主线程中运行,所以先打印我是懒番茄
 
   主线程内的任务执行完毕为空,会去Event Queue读取对应的函数,进入主线程执行。
  
   过了一秒定时器中的代码运行完成了,就会将函数移入到Event Queue(简单来说,也可以看做一个容器)
  
   定时器中的函数进入主线程开始运行,输出 `我是定时器的输出`

setTimeout

setInterval

Promise与process.nextTick(callback)

宏任务 微任务

事件循环的顺序,决定js代码的执行顺序。进入整体代码(宏任务)后,开始第一次循环。接着执行所有的微任务。然后再次从宏任务开始,找到其中一个任务队列执行完毕,再执行所有的微任务

通俗点的话来说

script整个可以看成一个宏任务,首先执行的就是script这个整体,遇见同步的就直接放到主线程执行,遇见微任务就放入到本次事件循环宏任务的微任务队列中,遇见宏任务就挂起,满足执行条件后就放入到宏任务队列,script这个宏任务执行完毕后就开始执行本次宏任务中的微任务队列,微任务队列内容执行完毕后就相当于第一次事件循环结束。下面开始把满足条件的宏任务队列拿出来一个(就好像script一样)继续执行。所以叫做事件循环,因为一直在循环。

面试题图解

面试题一

console.log('start')

setTimeout(()=>{
    console.log('timeout')
},0)

new Promise((resolve,reject)=>{
    resolve()
    console.log('resolve')
}).then(()=>{
    console.log('then')
})

console.log('end')
宏任务微任务面试题1.png

面试题二

console.log('1');

setTimeout(function() {
    console.log('2');
    process.nextTick(function() {
        console.log('3');
    })
    new Promise(function(resolve) {
        console.log('4');
        resolve();
    }).then(function() {
        console.log('5')
    })
})
process.nextTick(function() {
    console.log('6');
})
new Promise(function(resolve) {
    console.log('7');
    resolve();
}).then(function() {
    console.log('8')
})

setTimeout(function() {
    console.log('9');
    process.nextTick(function() {
        console.log('10');
    })
    new Promise(function(resolve) {
        console.log('11');
        resolve();
    }).then(function() {
        console.log('12')
    })
})

宏任务微任务面试题2.png 宏任务微任务面试题3.png

END

文章编写仓促,有问题欢迎指出,想法是希望以后遇到这类问题,手到擒来。互勉。很多内容,我觉得原作者写的非常好,所以有所借鉴,感谢。

上一篇下一篇

猜你喜欢

热点阅读