JS面试题:说一下js单线程的理解?

发布时间:2024年01月10日

? ? js是单线程的,内部要处理的任务分同步任务、异步任务

? ? 异步任务分微任务、宏任务

? ? 执行顺序:【又称 事件循环机制 】

? ? 先执行同步任务,遇到异步宏任务则将异步宏任务放入宏任务队列中,遇到异步微任务则将异步微任务放入微任务队列中。当所有同步任务执行完毕后,再将异步微任务从队列中调入主线程执行,微任务执行完毕后再将异步宏任务从队列中调入主线程执行,一直循环直至所有任务执行完毕。

? ? 微任务和宏任务有哪些:

? ? ? ? 宏任务一般是:script、setTimeout、setInterval、I/O、UI交互事件、postMessage、MessageChannel

? ? ? ? 微任务:Promise.then、Object.observe、MutationObserver

? ? 示例:

 setTimeout(function(){      console.log(1);  });  new Promise(function(resolve){              console.log(2);      resolve();  }).then(function(){              console.log(3);  }).then(function(){      console.log(4)  });  console.log(5);  // 2 5 3 4 1

? ? ? ? 遇到setTimout,异步宏任务,放入宏任务队列中

? ? ? ? 遇到new Promise,new Promise在实例化的过程中所执行的代码都是同步进行的,所以输出2

? ? ? ? Promise.then,异步微任务,将其放入微任务队列中

? ? ? ? 遇到同步任务console.log(5);输出5;主线程中同步任务执行完

? ? ? ? 从微任务队列中取出任务到主线程中,输出3、 4,微任务队列为空

? ? ? ? 从宏任务队列中取出任务到主线程中,输出1,宏任务队列为空

文章来源:https://blog.csdn.net/m0_74802419/article/details/135506028
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。