js作为单线程的运行机制,必定有自己的运行顺序

js可分为同步任务和异步任务,对于同步的任务,我们当然知道按照顺序进行执行,但是对于`异步`的操作,会有一个优先级的执行顺序,分别为`宏任务`和`微任务`

宏任务(macrotasks)和微任务(microtasks)??包含什么?

`macrotasks: setTimeout, setInterval, setImmediate, I/O, UI rendering`

`microtasks: process.nextTick, Promises, Object.observe(废弃), MutationObserver`

Js运行机制:

JS是单线程执行:
在浏览器环境中,有JS 引擎线程和渲染线程,且两个线程互斥。
Node环境中,只有JS 线程。
宿主:
JS运行的环境。一般为浏览器或者Node。
执行栈:
是一个存储函数调用的栈结构,遵循先进后出的原则。
Event Loop:
image.png
JS引擎常驻于内存中,等待宿主将JS代码或函数传递给它。
也就是等待宿主环境分配宏观任务,反复等待 - 执行即为事件循环。

Event Loop中,每一次循环称为tick,每一次tick的任务如下:

  • 执行栈选择最先进入队列的宏任务(一般都是script),执行其同步代码直至结束;
  • 检查是否存在微任务,有则会执行至微任务队列为空;
  • 如果宿主为浏览器,可能会渲染页面;
  • 开始下一轮tick,执行宏任务中的异步代码(setTimeout等回调)

持续更新中。。。
深入了解链接https://www.jianshu.com/p/bfc...


南山不会落梅花
49 声望3 粉丝