微任务和宏任务或问事件循环
时间: 2023-06-05 12:06:43 浏览: 125
微任务和宏任务是指在JavaScript中执行的异步任务。宏任务是指在事件循环中排队的任务,如setTimeout、setInterval、I/O操作等。而微任务则是在当前宏任务完成后立即执行的任务,如Promise、MutationObserver等。事件循环是JavaScript执行时运行的机制,它用于协调宏任务和微任务的执行顺序,以保证JavaScript代码的正确执行。
相关问题
事件循环机制中微任务和宏任务
事件循环机制是指在浏览器中如何处理异步操作的机制。在事件循环中,任务被分为两种类型:微任务和宏任务。
宏任务(macro task)包括整体代码(script),setTimeout,setInterval,I/O,UI rendering等。当宏任务执行完后,会检查是否有微任务需要执行,如果有,就执行所有微任务。然后再继续执行下一个宏任务,依次循环。
微任务(micro task)包括Promise,process.nextTick等。当微任务被加入到事件队列中时,它们会在宏任务之前执行。
在一个事件循环中,先执行当前宏任务中的同步代码,然后执行当前宏任务中的异步代码,接着执行所有微任务中的代码,然后再执行下一个宏任务。这个过程会一直重复,直到事件队列中没有任务为止。
js 事件循环 异步/同步和宏任务/微任务
JavaScript 的事件循环(Event Loop)是 JavaScript 运行机制中的核心部分,负责处理异步操作和线程调度。它是 JavaScript 中实现非阻塞I/O和响应用户交互的关键。
**异步/同步:**
- **同步**(Synchronous):代码按照顺序执行,每个任务完成后才会执行下一个任务。如果某个任务耗时较长,将导致整个程序暂停直到该任务完成。
- **异步**(Asynchronous):代码执行不会被阻塞,当遇到异步任务(如定时器、网络请求或读取文件)时,JavaScript会继续执行后续的同步代码,而把异步任务放到后台等待处理,完成后通过回调、Promise 或 async/await 结合事件循环来通知主线程。
**宏任务/微任务:**
- **宏任务(Macrotask)**:指的是那些浏览器可以感知到的任务,比如脚本执行、UI渲染、DOM操作、setTimeout 和 setInterval 回调等。每次事件循环开始,都会先执行所有已排队的宏任务。
- **微任务(Microtask)**:微任务比宏任务优先级高,它们通常是在某些特定情况下生成的,例如 Promise 的 resolve 或 reject 时、MutationObserver 观察到 DOM 变化时、process.nextTick() 执行的内容。每当宏任务执行完毕,立即执行所有的微任务。
简而言之,事件循环的工作流程大致如下:
1. 执行当前同步代码块。
2. 如果有微任务,立即执行微任务。
3. 宏任务队列中如果有任务,执行宏任务。
4. 完成当前宏任务后,再次检查是否有微任务并执行。
5. 重复步骤3和4,直到没有更多任务。
阅读全文