Welcome toVigges Developer Community-Open, Learning,Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
725 views
in Technique[技术] by (71.8m points)

宏任务 和微任务 的一到关于先后执行的面试题

setTimeout(() => {

 console.log("time1");

 setTimeout(() => {

 console.log("time3");

 }, 0);

 new Promise((resolve) => {

 resolve();

 console.log("new?resolve");

 }).then(() => {

 console.log("Promise?then");

 });

 }, 0);

 setTimeout(() => {

 console.log("time2");

 }, 0);

 console.log("mian");
 
 
 //  求解,执行顺序的原理???

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Answer

0 votes
by (71.8m points)

这个问题是老生常谈了,前人之述备矣,本来想推一下官方的手册,奈何今天是用手机作答,麻烦得很。
首先就是简记一个规则:宏任务跟微任务都要执行的时候,微任务优先,然后这里 Promise.then是微任务,setTimeout(的回调函数)在宏任务里,你说这俩碰到一块谁先?
然后本着记少不记多的原则,记住哪些东西是微任务,通常只会考察Promise,毕竟微任务的实现貌似就是为了迁就这货的,面子这么大,记不住都不好意思说自己会现代JS
在这个题中还有一个隐藏的知识点:向Promise的构造函数传递的函数的第一个参数就是Promise.then,了解这一点就不会疑惑为啥先有promise then 后有promise resolve。然后你猜第二个参数是啥?
关于 Promise 我还有一种更加阴损的问法,但是我不说,懂我意思的人也不会说,不然让面试的出题家们学了去就太损了。
当然面试的时候最好能主动扩展一下,说说这段代码在遇到基于polyfill版本的 Promise时会有怎样的风景,注意观察一下面试官的微表情,如果他没有微笑的话说明他技术比较菜,可能比你还菜。


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome to Vigges Developer Community for programmer and developer-Open, Learning and Share
...