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

javascript for()循环里面的setInterval闭包问题, 看看我哪写错了

javascript for()循环里面的setInterval闭包问题, 看看我哪写错了

qq_遁去的一_1 2019-04-10 20:49:26
ShowCountDown(a,b,c,d,e){}for(vari=0;i
查看完整描述

2 回答

?
繁星coding

TA贡献1797条经验 获得超4个赞

你的写法有问题,setInterval函数第一个参数接收的是一个function对象或者是一个代码片段的字符串表示(这个很拗口,说白了就是把你要执行的代码用“”包起来)。而你现在这种写法是先执行的匿名函数,然后将匿名函数的返回值给了setInterval的第一个参数。显然你的匿名函数并没有返回任何东西。
你可以这样写
for(vari=0;i<4;i++){
window.setInterval(function(){
todo(i);
},interval);
}
但是这样写有另外一个问题,setInterval是异步的,等到到达执行的时间的时候,里面的i已经变成3了。需要通过作用域来确保变量的值是想要的值。
for(vari=0;i<4;i++){
(function(i1){
window.setInterval(function(){
todo(i1);
},interval);
})(i);
}
                            
查看完整回答
反对 回复 2019-04-10
?
LEATH

TA贡献1936条经验 获得超6个赞

setInterval的第一个参数是传一个function,你这里是已经执行了匿名函数,也就是说是这个函数的返回值。试下下面的代码:
setInterval(
function(){
(function(a,b,c,d,e){
ShowCountDown();
})(filterArray[0],filterArray[1],filterArray[2],'time',i);
}
,interval);
)
                            
查看完整回答
反对 回复 2019-04-10
  • 2 回答
  • 0 关注
  • 449 浏览
慕课专栏
更多

添加回答

举报

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