关于 js的运行机制

xiaoxiao2021-02-28  18

js首先是单线程的,也就是一条路走到黑..从上到下的顺序执行。 为了避免阻塞js提供了异步回调机制,比如settimeout,setInterval,以及新增的Promise。 在js执行过程中,如果是同步任务,就会直接运行,如果是异步任务就会把他们放入等待区(EventTable)中在等待它运行结束,完成后把回调函数放到任务列表中。 任务队列又分为 宏任务队列,微任务队列。 宏任务包含:整体的script代码(第一次的同步代码),settimeout,setInterval 微任务包含:Promise,process.nextTick 脚本开始执行的时候会从宏任务开始,一步步往下走分别把异步任务扔到等待区,等待区完成的任务将各自走回自己该去的地方,宏任务执行结束之后执行微任务,执行完成之后再执行宏任务,依次循环。

console.log(1); //宏任务 setTimeout(() => { //扔到等待区 console.log(5); 完成回到宏任务等待下次执行 }, 0); let i=setInterval(()=>{ //扔到等待区 console.log(6); //完成回到宏任务等待下次执行 clearInterval(i); },0) new Promise(r=>{ console.log(2); //这个代码块也是宏任务 setTimeout(() => { //扔到等待区 console.log(7); //完成回到宏任务等待下次执行 }, 0); r(); //把下面扔到等待区的then任务标志完成让它去微任务 }).then(()=>{ //扔到等待区 console.log(4); //到了微任务等着被执行 }) console.log(3);//宏任务

值得注意的是 Promise中直接注册的回调函数将直接运行在宏任务。 上面代码的运行结果 是顺序的 1,2,3,4,5,6,7

参考:https://juejin.im/post/59e85eebf265da430d571f89

转载请注明原文地址: https://www.6miu.com/read-1650262.html

最新回复(0)