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,微任务队列为空文章来源:https://www.toymoban.com/news/detail-824263.html
从宏任务队列中取出任务到主线程中,输出1,宏任务队列为空文章来源地址https://www.toymoban.com/news/detail-824263.html
到了这里,关于JS面试题:说一下js单线程的理解?的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!