setTimeout的回调加入异步队列,延迟时间是从什么时候开始计算的

来源:4-2 单线程 - 介绍-1

weibo_慕莱坞2325037

2019-12-03

老师您好,
比如说我有以下代码

// 延迟2000ms的异步A
setTimeout(function () {
    console.log("2s later");
}, 2000);

// 无延迟异步B
setTimeout(function () {
    console.log("first");
});

// 最后一行代码
console.log("完成");

问题是:

  1. 异步A的回调函数加入异步队列的时间,
    是在执行完最后一行代码后,延迟2000ms再加入,
    还是说从执行setTimeout函数那一刻起就开始计算2000ms。

  2. 同理,如果不传延迟参数,是执行到setTimeout这一行,回调立刻被加入异步队列(即时同步代码没有执行完),
    还是说要等到所有同步代码执行完毕才会被立刻加入

写回答

2回答

慕设计4929911

2019-12-03

定时任务是异步的,所以说从执行setTimeout就开始计算,只要到了2s,不管主进程的任务有没有执行完成,轮询队列里都会多一个回调函数,至于能不能在2s准时执行,就要看2s内主进程的任务能不能执行完成,若能,就会准时执行,若不能,则会延迟。

1
0

双越

2019-12-03

@weixin_马里奥先生_0 同学回复的没问题。

0
0

前端跳槽必备 一线互联网公司高级前端JavaScript面试

视频讲解前端面试中的JS高级知识点,扩展JS知识深度,从容面试

1621 学习 · 218 问题

查看课程