JS 运行机制

  • A+
所属分类:Web前端
摘要

单线程:js 是单线程的,js在同一时间只能做一件事情这就叫单线程任务队列:异步过程与单线程本身看起来是冲突的,就是任务队列使这两个不冲突

单线程:js 是单线程的,js在同一时间只能做一件事情这就叫单线程

任务队列:异步过程与单线程本身看起来是冲突的,就是任务队列使这两个不冲突

注意:优先执行同步任务才执行异步任务

同步任务:在js同步运行的任务叫同步任务

异步任务:setTimeout 和 setInterval,DOM 事件,ES6中的promise 叫异步任务

JS 运行机制

 

Event Loop(事件循环)

  1. 运行栈运行的是同步任务(运行栈执行的是同步任务)
  2. 浏览器识别了事件是一个异步任务,它不会把它放到运行栈中,而是拿走。拿走之后也不是立刻放到异步队列中,同步任务执行完后再放入异步队列(setTimeout 的最小时间在以前的浏览器中的10ms, 在最新的浏览器是4ms,如果设置是0 或者<4ms 都当作是4ms)(什么时候去异步队列取这个任务?)
  3. 运行栈没有任务了,就开始执行异步任务(这个时候异步任务变为同步任务去执行)。执行完后如果运行栈没有任务了,再监听异步任务。这个循环过程就是 Event Loop(什么时候往这个任务队列中放异步任务)

JS 运行机制

什么时候开启异步任务

  • setTimeout 和 setInterval
  • DOM 事件
  • ES6 中的 Promise