js 运行机制
1. 单线程语言:单线程是指Js引擎执行Js时只分了一个线程给他执行,也就是执行js时是单线程的,在单线程语言中同一时间只能做一件事情
2. 运行环境:js的运行环境一般在node或者浏览器下
3. 任务队列:所有任务可以分成两种,一种是**同步任务(sync)**,另一种是**异步任务(async)**。同步任务指的是,在主线程上排队执行的任务,只有前一个任务执行完毕,才能执行后一个任务;异步任务指的是,不进入主线程、而进入"任务队列"(task queue)的任务,只有"任务队列"通知主线程,某个异步任务可以执行了,该任务才会进入主线程执行。
宏任务与微任务
宏任务
可以理解是每次执行栈执行的代码就是一个宏任务(包括每次从事件队列中获取一个事件回调并放到执行栈中执行)。
宏任务包括:script(整体代码)、 setTimeout、 setInterval I/O、 UI交互事件 、postMessage、 MessageChannel、 setImmediate(Node.js 环境)
微任务
可以理解是在当前 task 执行结束后立即执行的任务。也就是说,在当前task任务后,下一个task之前,在渲染之前
微任务包括: Promise.then 、Object.observe、MutaionObserver、process.nextTick(Node.js 环境)
1 | let con = "<h2>页面渲染</h2>"; |
由此我们可知 微任务 > DOM渲染 > 宏任务