如何理解JS异步编程的,EventLoop,消息队列都是做什么的,什么是宏任务,什么是微任务?

1. js在浏览器的执行机制-单线程:原因是操作dom和操作js两者互斥

2. js同步和异步编程

同步 : 两件事,必须昨晚第一件事才能做第二件事
异步 :两件事情,可以在第一件事的同时去做第二件事

3. 异步编程

js当中异步编程的例子:回调函数、Promise对象、事件监听、generator异步方法、Async/Await语法糖(es7)等等。

4. EventLoop事件和消息队列

当js发起异步调用,js线程和浏览器的异步调用线程同时开始执行,js执行调用栈的本轮任务,异步任务完成后会依次压入到消息队列,当调用栈为空,EventLoop(事件循环机制)会从消息队列中取出回调任务执行。

执行过程中关键点通俗解释:

web APIs: 负责定时器的倒计时,倒计时结束将定时器里的回调函数压入消息队列。
Event Loop:循环监听调用栈和消息队列,每一轮的循环中,先执行调用栈,当调用栈清空,即将消息队列中的任务压入调用栈
消息队列:依次存储待执行的任务队列(先进先出)

5. 宏任务和微任务

宏任务:是消息队列中的一个个任务,由Event Loop负责监听并触发调用;例如setTimeout、setIntreval等
微任务:可以理解为宏任务内部最后被执行的任务,例如Promise.then、process.nextTick等。小记,当前宏任务中途产生的新的微任务,会继续执行,直到当前任务中的微任务全部执行。
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容