V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐关注
Meteor
JSLint - a JavaScript code quality tool
jsFiddle
D3.js
WebStorm
推荐书目
JavaScript 权威指南第 5 版
Closure: The Definitive Guide
cheroky
V2EX  ›  JavaScript

前两天遇到一个面试题,来跟大家一起讨论一下

  •  
  •   cheroky · 2019-07-13 15:38:26 +08:00 · 4036 次点击
    这是一个创建于 1966 天前的主题,其中的信息可能已经有所发展或是发生改变。

    有 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'));
    
    });
    
    

    不知大家有啥想法

    13 条回复    2020-03-18 01:59:26 +08:00
    IsaacYoung
        1
    IsaacYoung  
       2019-07-13 15:42:17 +08:00
    1 a b c d e 2 3 有问题吗?
    cheroky
        2
    cheroky  
    OP
       2019-07-13 16:06:19 +08:00
    @IsaacYoung 确实是这个结果,但是按面试官那个那个情景执行顺序就不对
    reus
        3
    reus  
       2019-07-13 16:12:50 +08:00
    讨论这种未定义行为是无意义的
    谁写代码依赖这个,谁就是挖坑
    rabbbit
        4
    rabbbit  
       2019-07-13 16:13:18 +08:00
    没看出哪里有错, 微任务优先,全部完成后执行宏任务.
    面试官的情景是指什么?
    sunjourney
        5
    sunjourney  
       2019-07-13 16:24:23 +08:00
    @reus #3 这是有定义的行为
    meszyouh
        6
    meszyouh  
       2019-07-13 16:39:39 +08:00 via Android
    这个不是看环境么。
    reus
        7
    reus  
       2019-07-13 16:45:33 +08:00
    @sunjourney 是在哪个标准里定义的?
    reus
        8
    reus  
       2019-07-13 16:58:42 +08:00   ❤️ 1
    @sunjourney 这个行为没有哪个标准有定义,只不过各个 js 引擎都实现成这样,node 直到去年,都没有这个保证,后来才改成和浏览器一致: https://github.com/nodejs/node/issues/22257。所以这就是个未定义行为。如果执行环境是比较旧的 node,行为就不一致了。
    reus
        9
    reus  
       2019-07-13 16:59:01 +08:00
    Sparetire
        10
    Sparetire  
       2019-07-14 02:33:16 +08:00 via Android
    看是 node 还是浏览器
    yimity
        11
    yimity  
       2019-07-15 10:16:13 +08:00
    谁代码要这么写,我肯定打死他。
    lvcq
        12
    lvcq  
       2019-07-23 10:14:09 +08:00
    标准里有定义没
    xcstream
        13
    xcstream  
       2020-03-18 01:59:26 +08:00
    直接反问 你能保证所有的浏览器和 node 都能跑出一样的结果吗
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2520 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 04:49 · PVG 12:49 · LAX 20:49 · JFK 23:49
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.