JS事件循环,宏任务、微任务
时间: 2023-11-08 12:51:06 浏览: 57
JS事件循环是指在JavaScript中,代码的执行是按照事件循环机制进行的。事件循环是一个持续执行的过程,它不断地将待执行的任务从任务队列中取出并执行。在事件循环中,任务分为同步任务和异步任务,异步任务又分为宏任务和微任务。
宏任务是由宿主环境提供的异步任务,比如setTimeout、setInterval等。宏任务会被放入宏任务队列中,只有当执行栈为空时,宏任务才会被执行。
微任务是由JavaScript引擎自身发起的异步任务,比如Promise的回调函数、MutationObserver等。微任务会被放入微任务队列中,在执行栈被清空之后立即执行。
在事件循环中,每次循环都会从宏任务队列中取出一个宏任务执行,然后检查微任务队列是否为空,如果不为空,则依次取出并执行微任务,直到微任务队列为空。然后再从宏任务队列中取出下一个宏任务,依次循环。
相关问题
js事件循环机制以及宏任务微任务
JavaScript 是一门单线程语言,也就是说在同一时间内只能执行一个任务。但是它又需要处理各种不同的任务,如 UI 事件、网络请求等。为了解决这个问题,JavaScript 引入了事件循环机制。
事件循环机制基于一个事件循环线程,该线程会不断地从任务队列中取出任务并执行。任务可以分为两种类型:宏任务和微任务。
宏任务是指由浏览器或 Node.js 提供的 API,如 setTimeout、setInterval、I/O 操作等。当宏任务执行完毕后,事件循环线程会从宏任务队列中取出一个新的宏任务继续执行,直到宏任务队列为空。
微任务是指由 Promise、MutationObserver 等提供的异步任务。当一个微任务被加入队列中时,事件循环线程会在当前宏任务执行完毕后,立即执行所有微任务。如果在执行微任务的过程中,又产生了新的微任务,那么这些新的微任务会被添加到微任务队列的末尾,等待下一轮执行。
在事件循环机制中,每个宏任务只会对应一个微任务队列。当一个宏任务执行完毕后,会依次执行该宏任务对应的微任务队列中的所有微任务,直到微任务队列为空。然后再取出下一个宏任务并执行。
总结一下,事件循环机制的执行顺序为:执行一个宏任务,接着执行该宏任务的微任务队列中的所有微任务,然后再执行下一个宏任务。这个过程会不断地重复,直到所有任务都被执行完毕。
宏任务、微任务、事件循环
在JavaScript中,异步任务被分为两类:宏任务和微任务。宏任务是由浏览器或Node.js环境提供的任务,例如setTimeout、setInterval、setImmediate和I/O操作等。而微任务是由JavaScript引擎提供的任务,例如Promise、MutationObserver等。事件循环是JavaScript引擎用来处理异步任务的机制,它会不断地从宏任务队列中取出一个任务执行,执行完毕后再去处理微任务队列中的任务,直到两个队列都为空为止。在同一次事件循环中,微任务永远在宏任务之前执行。