- A+
所属分类:Web前端
单线程:js 是单线程的,js在同一时间只能做一件事情这就叫单线程
任务队列:异步过程与单线程本身看起来是冲突的,就是任务队列使这两个不冲突
注意:优先执行同步任务才执行异步任务
同步任务:在js同步运行的任务叫同步任务
异步任务:setTimeout 和 setInterval,DOM 事件,ES6中的promise 叫异步任务
Event Loop(事件循环)
- 运行栈运行的是同步任务(运行栈执行的是同步任务)
- 浏览器识别了事件是一个异步任务,它不会把它放到运行栈中,而是拿走。拿走之后也不是立刻放到异步队列中,同步任务执行完后再放入异步队列(setTimeout 的最小时间在以前的浏览器中的10ms, 在最新的浏览器是4ms,如果设置是0 或者<4ms 都当作是4ms)(什么时候去异步队列取这个任务?)
- 运行栈没有任务了,就开始执行异步任务(这个时候异步任务变为同步任务去执行)。执行完后如果运行栈没有任务了,再监听异步任务。这个循环过程就是 Event Loop(什么时候往这个任务队列中放异步任务)
什么时候开启异步任务
- setTimeout 和 setInterval
- DOM 事件
- ES6 中的 Promise