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:
JS引擎常驻于内存中,等待宿主将JS代码或函数传递给它。
也就是等待宿主环境分配宏观任务,反复等待 - 执行即为事件循环。
Event Loop中,每一次循环称为tick,每一次tick的任务如下:
- 执行栈选择最先进入队列的宏任务(一般都是script),执行其同步代码直至结束;
- 检查是否存在微任务,有则会执行至微任务队列为空;
- 如果宿主为浏览器,可能会渲染页面;
- 开始下一轮tick,执行宏任务中的异步代码(setTimeout等回调)
持续更新中。。。
深入了解链接:https://www.jianshu.com/p/bfc...
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。