- 时间:2022-07-02 01:30 编辑: 来源: 阅读:275
- 扫一扫,手机访问
摘要:用一百个字理解JS运行机制。
<源码交易平台>
小回顾一下JS的运行机制:之前的进程和线程细节到前台主要是在渲染过程中进行的,其中包含了少量与JS运行相关的常用线程:JS引擎线程、事件触发线程和定时器线程。 1.JS是单线程JS,分为同步任务和异步任务;同步任务在主线程上执行,形成执行栈;触发线程维护一个事件队列,当异步任务有运行结果时,会添加到事件队列的尾部,等待JS引擎空闲时执行;当执行堆栈中的所有任务完成后,系统将读取事件队列,并将可执行任务添加到执行堆栈中进行执行。 上述过程称为事件循环。 2.宏任务,微任务宏任务:任务队列中的任务(相当于同步任务和部分异步任务:定时器)在执行栈上按顺序执行,每个任务都会被完整执行,过程中不会中断;微任务:一种异步任务,比如promise和MutationObserver,存在于微任务队列中,在执行栈中的任务之间执行(可以在一个队列中执行,所以比setTimeout的响应更快)。JS会循环检查任务队列中是否有微任务。一旦执行堆栈中的任务完成并且有微任务等待,微任务队列中的所有微任务都将被执行。 注:各浏览器之间宏任务和微任务的执行顺序可能会有一些差异,但在总结本文时已经统一了chrome、safari和firefox上的尝试。 3.例3.1例1 console.log('脚本开始');setTimeout(function(){ console . log(' setTimeout ');}, 0);Promise.resolve()。then(function(){ console . log(' promise 1 ');}) .then(function(){ console . log(' promise 2 ');});console.log('脚本结束');执行结果:脚本开始脚本结束promise 1 promise 2 settimeout 3.2示例2 html