讲清楚基础系列JS执行机制

9次阅读

共计 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/…
正文完
 0