总结:JavaScript异步、事件循环与消息队列、微任务与宏任务 (3)

JavaScript 是单线程语言,决定于它的设计最初是用来处理浏览器网页的交互。浏览器负责解释和执行 JavaScript 的线程只有一个(所有说是单线程),即JS引擎线程,但是浏览器同样提供其他线程,如:事件触发线程、定时器触发线程等。

异步一般是指:

网络请求

计时器

DOM事件监听

事件循环机制:

JS引擎线程会维护一个执行栈,同步代码会依次加入到执行栈中依次执行并出栈。

JS引擎线程遇到异步函数,会将异步函数交给相应的Webapi,而继续执行后面的任务。

Webapi会在条件满足的时候,将异步对应的回调加入到消息队列中,等待执行。

执行栈为空时,JS引擎线程会去取消息队列中的回调函数(如果有的话),并加入到执行栈中执行。

完成后出栈,执行栈再次为空,重复上面的操作,这就是事件循环(event loop)机制。

参考:

Tasks, microtasks, queues and schedules

great talk at JSConf on the event loop

从浏览器多进程到JS单线程,JS运行... - 掘金

浏览器篇-Event-Loop.md - PDKSophia/blog.io

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zyydwg.html