JavaScript中宏任务和微任务的执行顺序如下:
宏任务和微任务的基本概念:
- 宏任务:包括整个脚本以及由setTimeout等方法传入的函数。
- 微任务:由Promise等方法生成,回调函数会被加入微任务队列。
执行顺序:
- JavaScript单线程执行,宏任务和微任务分别在主线程中执行。
- 执行顺序为:宏任务 > 宏任务 > … > 【宏任务 [微任务]】 > 【宏任务 [微任务]】 > …
- 每个宏任务执行完毕后,会检查并执行该宏任务产生的所有微任务,然后再执行下一个宏任务。
生成宏任务和微任务的方法:
- 宏任务生成方法:以setTimeout为例,设置一个定时器,定时器到时间后,其传入的函数会被加入宏任务队列。
- 微任务生成方法:以Promise为例,传给Promise的函数会立即执行,但其then方法中的回调函数会被加入微任务队列。
实际应用中的表现:
- 使用setTimeout时,第二个宏任务只有在第一个宏任务执行完毕后才会执行。
- 使用Promise时,若直接resolve,注册在then中的函数会被加入微任务队列,在宏任务执行完毕后立即执行。
- 使用async和await时,async函数会包裹一个Promise,await会暂停当前函数的执行,直到Promise解决,然后继续执行await右边的逻辑。
注意事项:
- 宏任务和微任务的执行顺序可能受到不同运行环境和JavaScript引擎版本的影响。
- 在复杂场景中,了解底层运行时环境及版本对理解宏任务与微任务执行顺序至关重要。
总结:理解JavaScript中宏任务和微任务的执行顺序需要从基本概念出发,掌握其生成方法和执行顺序,同时注意不同运行环境和版本可能带来的影响。通过实践和阅读底层代码可以加深理解。