共计 455 个字符,预计需要花费 2 分钟才能阅读完成。
js
为什么是单线程的?单线程的 js
是怎么实现异步的?
问题一:多线程的 js
操作同一个 DOM,会造成浏览器的执行冲突(比如:一个删除,一个修改)。
问题二:通过事件循环机制(EventLoop)实现异步;
EventLoop
JS 是单线程的,主线程拥有一个执行栈和执行队列。主线程自上而下依次执行代码,并判断函数是同步的还是异步的,同步的函数直接在主线程中执行,异步函数塞入执行队列。当主线程的函数执行完毕后,再将异步函数从执行队列中出栈,直到执行完毕。
macrotasks:
- setTimeout
- setInterval
- setImmediate
- requestAnimationFrame
- I/O
- UI rendering
microtasks:
- process.nextTick
- Promises
- Object.observe
- MutationObserver
==microtask 的执行优先级高于 macrotask==
浏览器和 Node 的执行顺序不一样,上述规则适用于浏览器
- https://github.com/kaola-fed/…
正文完