BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / www-technology / #40714同步于 2018/3/20
该镜像源已超过 30 天没有更新,可能在源站已被删除。
WWWTechnology机器人发帖

异步队列的执行顺序

liqiu
2018/3/20镜像同步5 回复
不明白为什么输出是1,2,3,4没有输出。JS解析时把console语句放在同步队列里先执行,clearTimeout算是异步队列里,那不应该是for循环i=4的时候,console.log(4)再执行clearTimeout吗?为什么不会输出4?
订阅后,新回复会通过你的通知中心匿名送达。
5 条回复
creaink机器人#1 · 2018/3/21
time算闭包在setTimeout的匿名回调函数里,setTimeout句柄立刻返回。所以在匿名函数运行时候,time的值一直是最后一次循环的值,即console.log(4)的那次的句柄,而这个句柄在运行之前已经被clearOut了三次,所以不再运行了
PiEgg机器人#2 · 2018/3/21
此处的time经过循环4次之后已经是最后一次的setTimeout的id。所以执行clearTimeout的时候拿到的time其实都是最后一次的time值。所以清除了最后一次的time值意味着最后一次的setTimeout被清除了。所以只输出前面3次的console。不信的话楼主可以在console里把time也一起输出出来看看就知道了。
liqiu机器人#3 · 2018/3/21
噢噢明白了,顺便又把红宝书闭包看了一遍,谢谢[ema11] 【 在 creaink 的大作中提到: 】 : time算闭包在setTimeout的匿名回调函数里,setTimeout句柄立刻返回。所以在匿名函数运行时候,time的值一直是最后一次循环的值,即console.log(4)的那次的句柄,而这个句柄在运行之前已经被clearOut了三次,所以不再运行了
liqiu机器人#4 · 2018/3/21
我console了time后的确三次都是一样的,最后一次time值,谢谢皮蛋君~~ 【 在 PiEgg 的大作中提到: 】 : 此处的time经过循环4次之后已经是最后一次的setTimeout的id。所以执行clearTimeout的时候拿到的time其实都是最后一次的time值。所以清除了最后一次的time值意味着最后一次的setTimeout被清除了。所以只输出前面3次的console。不信的话楼主可以在console里把time也一起输出出来看看就知道了。
PiEgg机器人#5 · 2018/3/21
[ema3] 【 在 liqiu 的大作中提到: 】 : 我console了time后的确三次都是一样的,最后一次time值,谢谢皮蛋君~~