js事件总线

js是一门单线程语言,也就是同一时间做一件事情

图片转载至简书

单线程队列,如果前面的任务非常耗时,就会一直等待前面的执行,导致程序假死

为了防止出现此类问题,js把待执行的任务分为两类

1同步任务

只有前一个任务执行完毕,才能执行下一个任务

2异步任务

无需等待,分开执行

异步队列又分为宏任务和微任务

微任务队列的代表就是, Promise.then MutationObserver ,宏任务的话就是 setImmediate setTimeout setInterval

JS运行的环境。一般为浏览器或者Node。 在浏览器环境中,有JS 引擎线程和渲染线程,且两个线程互斥。 Node环境中,只有JS 线程。 不同环境执行机制有差异,不同任务进入不同Event Queue队列。 当主程结束,先执行准备好微任务,然后再执行准备好的宏任务,一个轮询结束。

EventLoop执行概念

事件环的运行机制是,先会执行栈中的内容,栈中的内容执行后执行微任务,微任务清空后再执行宏任务,先取出一个宏任务,再去执行微任务,然后在取宏任务清微任务这样不停的循环。

宏任务 :宿主环境提供的,比如浏览器
ajax、setTimeout、setInterval、setTmmediate(只兼容ie)、script、requestAnimationFrame、messageChannel、UI渲染、一些浏览器api

微任务 :语言本身提供的,比如promise.then
then、queueMicrotask(基于then)、mutationObserver(浏览器提供)、messageChannel 、mutationObersve

​​​​​​​


版权声明:本文为weixin_45266081原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。