执行以下代码,输出结果为()

执行以下代码,输出结果为()

console.log(1); let a = setTimeout(() => {console.log(2)}, 0); console.log(3); Promise.resolve(4).then(b => { console.log(b); clearTimeout(a); }); console.log(5);

promise对象的then()方法属于微任务,而setTimeout()定时器函数为宏任务。
在执行顺序处理上,js会先执行所有同步代码,然后执行微任务队列中的所有微任务,最后再继续执行宏任务。
在本题中,先执行同步代码并输出1 3 5,接着执行Promise.resolve().then()方法,输出4,由于在then()方法内删除了定时器函数,所以不会再输出2,
最终输出结果为1 3 5 4

主要注意一点异步任务中的宏任务和微任务,微任务执行顺序早于宏任务,promise属于微任务

promise 是微任务,会在当前轮事件循环结束前执行;
setTimeout 是宏任务,在下一轮事件循环执行;
所以这个 setTimeout 设置的定时器被取消掉了

同步→异步→回调
promise是异步微任务,
setTimeout是异步宏任务,
微任务比宏任务先执行,所以取消了定时器回调


__EOF__

本文作者龙陌
本文链接https://www.cnblogs.com/longmo666/p/17824438.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。您的鼓励是博主的最大动力!
posted @   龙陌  阅读(71)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)
点击右上角即可分享
微信分享提示