一、事件循环
一、js是单线程的
JavaScript的单线程,与它的用途有关。作为浏览器脚本语言,JavaScript的主要用途是与用户互动,以及操作DOM。这决定了它只能是单线程

二、JS引擎通过事件循环机制分别执行同步任务和异步任务
异步任务包括宏任务和微任务
| 宏任务(macrotask) | 微任务(microtask) | |
|---|---|---|
| 是发起的 | 宿主(Node、浏览器) | JS引擎 |
| 具体时间 | 1. script(可以理解为外层同步代码) 2. setTimeout/setInterval 3. UI rendering/ UI事件 4. postMessage, MessageChannel 5. setImmediate, I/O(node.js) | 1. Prromise 2. MutaionObserver 3. Object.observe(已废弃;Proxy对象) 4. Process.nextTick(node.js) |
| 谁先运行 | 后 | 先 |
| 会触发新一轮Tick吗 | 会 | 不会 |