请问为什么小li 是一起打印出来,而不是三秒一个呢?

img

setTimeout(function(){

}, 3000*(i+1));

setTimeout()不会暂停当前程序线程的执行。
而是等当前程序线程执行完,才开始计时,计时到了之后重新建立一个新的程序线程来执行setTimeout()内的代码。
所以在for循环创建的多个setTimeout()计时器是同时计时的。需要为每个计时器设置不同的延时时间。

可以这么解释这个for循环,它一次性循环执行了3个闭包,三个闭包里都是一个延迟三秒后执行的匿名函数,for循环每个间隔时间非常短,短到人类无法察觉,所以展现一段时间后,一起打印三个。 做法是给每个setTimeout不同的间隔。