关于setTimeout的一个机制

在 JavaScript 中,setTimeout 是一种宏观任务,而宏观任务的数据结构是队列,它的特点就是 先进先出。

但是,浏览器会根据时间线程来控制队列的执行的顺序。

例如:

1
2
3
4
5
6
7
setTimeout(() => {
console.log("任务1");
}, 1000);

setTimeout(() => {
console.log("任务2");
});

执行结果:

上述代码执行顺序:

  1. 执行任务 2
  2. 1 秒后执行任务 1

由此我们可得,遇到 setTimeout,先把里面的函数放在浏览器的定时间线程里,等时间到了,浏览器会把对应的函数再加到当前程序执行的队列里。