
有 3 个宏任务,5 个微任务,第一个宏任务刚刚执行完毕。 问:剩下的任务的执行顺序。
当时我想都不想答 5 个微任务先执行,然后执行剩下 2 个宏任务,面试官答不对,还需要了解下宏任务微任务执行机制。网上好像都搜不到类似的题。拿下列代码试,结果也不对。
setTimeout(_=>{ console.log(1); setTimeout(_=>console.log(2)); setTimeout(_=>console.log(3)); Promise.resolve().then(_ => console.log('a')) .then(_ => console.log('b')) .then(_ => console.log('c')) .then(_ => console.log('d')) .then(_ => console.log('e')); }); 不知大家有啥想法
1 IsaacYoung 2019 年 7 月 13 日 1 a b c d e 2 3 有问题吗? |
2 cheroky OP @IsaacYoung 确实是这个结果,但是按面试官那个那个情景执行顺序就不对 |
3 reus 2019 年 7 月 13 日 讨论这种未定义行为是无意义的 谁写代码依赖这个,谁就是挖坑 |
4 rabbbit 2019 年 7 月 13 日 没看出哪里有错, 微任务优先,全部完成后执行宏任务. 面试官的情景是指什么? |
5 sunjourney 2019 年 7 月 13 日 @reus #3 这是有定义的行为 |
6 meszyouh 2019 年 7 月 13 日 via Android 这个不是看环境么。 |
7 reus 2019 年 7 月 13 日 @sunjourney 是在哪个标准里定义的? |
8 reus 2019 年 7 月 13 日 @sunjourney 这个行为没有哪个标准有定义,只不过各个 js 引擎都实现成这样,node 直到去年,都没有这个保证,后来才改成和浏览器一致: https://github.com/nodejs/node/issues/22257。所以这就是个未定义行为。如果执行环境是比较旧的 node,行为就不一致了。 |
9 reus 2019 年 7 月 13 日 |
10 Sparetire 2019 年 7 月 14 日 via Android 看是 node 还是浏览器 |
11 yimity 2019 年 7 月 15 日 谁代码要这么写,我肯定打死他。 |
12 lvcq 2019 年 7 月 23 日 标准里有定义没 |