JS的微任务、宏任务与Event Loop

JS中异步分为微任务和宏任务

要了解微任务与宏任务就要知道JS代码运行的顺序。

JS是单线程,也就是事情只能一个个去做。

JS是先执行完主线程的任务后才去执行任务队列。
任务队列:在JS运行时,先执行同步的代码,而异步的代码则会挂到任务队列中,等主线程执行完成后才执行任务队列的异步代码。

console.log(1);
console.log(2);

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

console.log(4);

先了解上面代码的执行顺序:
先执行主线程的代码,所以先输出 1,2 遇到setTimeout时,因为setTimeout是异步,所以会将它挂到任务队列里先,然后继续主线程的执行,再输出4,主线程完成了,JS就会执行任务队列的代码,所以最后输出3。
输出顺序为 1,2,4,3


异步可以分为微任务和宏任务。

常见的宏任务:setTimeout、setInterval、DOM事件、setImmediate
常见的微任务:Promise、process.nextTick

最重要——微任务优先于宏任务

	console.log(1);
    console.log(2);

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

    Promise.resolve().then(()=>{
    	console.log(5);
    }

先分析上面的代码就会对微任务与宏任务更深的了解;

JS先执行主线程的代码,所以先输出1,2 遇到setTimeout了,就把setTimeout挂到任务队列中,继续执行主线程的代码,输出4,遇到Promise了,也把Promise挂到任务队列中;所以目前先输出1,2,4;在任务队列中,Promise是微任务,优先于宏任务,所以Promise先执行,输出5,setTimeout最后执行,输出3。

顺序为:1,2,4,5,3。


Event Loop也叫JS事件循环机制;

我们已经知道JS代码运行除了主线程还有任务队列;Event Loop指的就是主线程执行完了,JS就会在任务队列里获取任务,任务完成后又会再回到任务队列里再次获取任务,就这样不断循环。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值