循环中setTimeout打印结果(使用闭包)

for(var i=1;i<4;i++){
	setTimeout(function(){
		console.log(i);
	},1000);
}

上面的代码会在1秒之后输出3个4,原因是i为全局变量,会先执行完循环(js是单线程机制,先执行同步代码,最后执行异步代码,setTimeout是异步调用),此时i的值已经为4,之前每次循环放入异步队列中的函数就会依次打印出i的值,即连续打印3次4

问题:如何将上面的改为1秒之后一次输出1,2,3?(一种是es6中的let声明变量i,此处利用闭包实现)

for(var i=1;i<4;i++){
	(function(j){
		setTimeout(function(){
			console.log(j);
		},1000);
	})(i);
}

上面的代码即可实现1秒后依次打印出1,2,3;此处利用闭包每次将i的值传入进去,里面使用参数j接受传过来的值,然后setTimeout异步调用,进入异步队列,循环代码很快执行完,在1秒后,从异步队列里返回执行后的结果,依次打印出1,2,3.

问题:如何使每隔1秒依次打印一个结果?(设置延迟时间依次增加1秒即可)

for(var i=1;i<4;i++){
	(function(j){
		setTimeout(function(){
			console.log(j);
		},1000*j);
	})(i);
}

上面代码在延迟执行时间那块加了一个参数j,j的值每次都会增加1,使时间每次扩大比上次大一倍,从而实现了每隔一秒就打印出一个结果

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值