为了账号安全,请及时绑定邮箱和手机立即绑定

这段代码如何让它每隔两秒依次输出循环的数字?十分感谢

这段代码如何让它每隔两秒依次输出循环的数字?十分感谢

九州编程 2019-10-25 22:04:51
下面这样一下就全部输出出来了for(leti=0;i{console.log(i)},2000)}
查看完整描述

2 回答

?
宝慕林4294392

TA贡献2021条经验 获得超8个赞

for(leti=0;i<100;i++){
(function(i){
setTimeout(function(){
console.log(i);
},1000*i);
})(i)
}
这是因为for循环里定义的i变量其实暴露在全局作用域内,于是多个定时器里的匿名函数它们其实共享了同一个作用域里的同一个变量。
所以如果想要0,1,2,3,4的结果,就要在每次循环的时候,把当前的i值单独存下来,怎么存下当前的循环i值??
利用闭包的原理,闭包使一个函数可以继续访问它定义时的作用域。而这个新生成的作用域将每一次循环的当前i值单独保存了下来。
                            
查看完整回答
反对 回复 2019-10-25
?
慕桂英3389331

TA贡献2036条经验 获得超8个赞

for(leti=0;i<100;i++){
setTimeout(()=>{
console.log(2000*i)
},2000*i)
}
                            
查看完整回答
反对 回复 2019-10-25
  • 2 回答
  • 0 关注
  • 291 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信