setTimeout的异步传输机制

setTimeout是异步的,在设置完setTimeout后,指定代码会在设定的时间后加入到任务队列,但并不是立即执行,js是单线程语言,所有的代码按顺序执行,即同步执行,同步执行的代码放在执行队列中,而异步执行的setTimeout放在任务队列中,执行顺序是先执行完执行队列中的代码再去查看任务队列中是否有要执行的代码

这段代码看上去好像4应该比5先打印出来,但实际上是先打印出5再打印出4:

就如上面所说的,1,3,5都放在执行队列中,而4,2放在任务队列中,所以4,2要等执行队列中的1,3,5执行完后再按它们设定的时间顺序执行,setTimeout所设定的时间是相对于主程序执行结束的时间,并不是一个绝对的值。

原文地址:https://www.cnblogs.com/cjw-ryh/p/7291848.html