js是单线程,你得setTimeout函数虽然时间设置为0,但是也是一个异步,他会在任务池中排队等待js引擎空闲才执行.
js的执行是单线程的,都需要排队去执行的,循环在一瞬间就完成了,即使时间是0,也是在排队。除非你用闭包去解决这个问题,就可以一次输出你想要的了
跟js的执行机制有关,js是单线程的,同一时间只能做一件事,通过事件轮询实现异步的执行,直接调用函数变量之类同步执行会进入到执行栈中,按顺序执行,所有的异步执行,则会放入执行队列,在回调接到相应后,插入到执行栈中执行。
setTimeout是个异步执行的回调,在执行队列中,所以会等所有的for循环任务栈结束后再执行,设置的时间代表当回调执行时,等待多长时间后执行,而不是js解析器读到这段代码,等待多长时间执行,所以有时候还会感觉执行时间比给定的时间长。
返回值就像上面所说的是定时器编号,所以一般使用定时器,都会给予一个命名,方便以后清除定时器。
https://segmentfault.com/q/1010000010351840
原文地址:https://www.cnblogs.com/yhl-0822/p/9835588.html
时间: 2024-11-02 22:24:25