当 setTimeout 遇上 for循环

当在for循环内加入setTimeout后,由于js是单线程,setTimeout是异步,
那么JS碰到这个有同步和异步的情况下会先从上到下执行同步代码,碰到异步的代码会将其插入到任务队列当中等待。而setTimeout是延时,也就是说碰到setTimeout这个异步的代码块会根据它里面的第二个参数:延时时间来将代码插入到任务队列当中,比如上面这段代码中,第二个参数延时时间是0,也就是说执行到它的时候会在0ms之后将它插入到任务队列当中。同步代码都执行完成之后,那么JS引擎就空闲了,这个时候就轮到任务队列中的异步代码依次加载了。

for( var i=0;i<10;i++){
	setTimeout( function(){ console.log(i) }, 5000 )
};

在这里插入图片描述

解决方法

for( var i=0;i<10;i++){ 
	(function(e){
		setTimeout(function(){
			console.log(e)
		},5000)}
	)(i)   
 };

在这里插入图片描述

发布了38 篇原创文章 · 获赞 5 · 访问量 4万+

猜你喜欢

转载自blog.csdn.net/weixin_39423672/article/details/83898324