宏任务与微任务

js 运行机制

	1. 单线程语言:单线程是指Js引擎执行Js时只分了一个线程给他执行,也就是执行js时是单线程的,在单线程语言中同一时间只能做一件事情 
	2. 运行环境:js的运行环境一般在node或者浏览器下 
	3. 任务队列:所有任务可以分成两种,一种是**同步任务(sync)**,另一种是**异步任务(async)**。同步任务指的是,在主线程上排队执行的任务,只有前一个任务执行完毕,才能执行后一个任务;异步任务指的是,不进入主线程、而进入"任务队列"(task queue)的任务,只有"任务队列"通知主线程,某个异步任务可以执行了,该任务才会进入主线程执行。

宏任务与微任务

  1. 宏任务

    可以理解是每次执行栈执行的代码就是一个宏任务(包括每次从事件队列中获取一个事件回调并放到执行栈中执行)。

    宏任务包括:script(整体代码)、 setTimeout、 setInterval I/O、 UI交互事件 、postMessage、 MessageChannel、 setImmediate(Node.js 环境)

  2. 微任务

    可以理解是在当前 task 执行结束后立即执行的任务。也就是说,在当前task任务后,下一个task之前,在渲染之前

    微任务包括: Promise.then  、Object.observe、MutaionObserver、process.nextTick(Node.js 环境)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
let con = "<h2>页面渲染</h2>";

document.write(con);

console.log(1);

Promise.resolve().then(()=>{

console.log('promise  2 ');

alert('promise then')

})

setTimeout(()=>{

console.log('setTimeout 3');

alert('setTimeout')

},0)

console.log(4)
//执行结果
1
4
promise  2 
setTimeout 3

由此我们可知 微任务 > DOM渲染 > 宏任务