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

定时器函数为什么不加括号 go为什么不加括号


function go(){
   if(speed <0 && parseInt(list.style.left) >newleft || speed > 0 && parseInt(list.style.left) < newleft){
       list.style.left = parseInt(list.style.left) +speed + 'px';
       setTimeout(go,interval);
   }else{
       list.style.left = parseInt(list.style.left) + offset + 'px';
       if(parseInt(list.style.left) > -600){
           list.style.left = -3000 + 'px';
       }
       if(parseInt(list.style.left) < -3000){
           list.style.left = -600 + 'px';
       }
   }
}

正在回答

3 回答

 setTimeout(go(),interval);这里的go()表示函数的直接调用,也就是在setTimeout这个函数没有执行的时候,go()就已经执行了;这样的话当第一次执行go()这个函数,并到 setTimeout(go(),interval)这行代码块时,go()在setTimeout还没执行时,它就执行了,这时go()再次被调用,而setTimeout没有执行;然后又到了 setTimeout(go(),interval)这行代码块,这时go()再次被调用,而setTimeout还是没有执行,以后一直这样,直到满足(speed <0 && parseInt(list.style.left) >newleft || speed > 0 && parseInt(list.style.left) < newleft)这个条件时, list.style.left = parseInt(list.style.left) + offset + 'px';也就是图片到达目的地。所以当你 写成setTimeout(go(),interval)时,你会发现图片直接跳转,而没有缓慢的动画过程,因为setTimeout没有执行过,那就不会有每隔一个interval,位移发生一点变化直到到达目的地这回事了,而是直接到达目的地。

0 回复 有任何疑惑可以回复我~

重回答:

 setTimeout(go(),interval);这里的go()表示函数的直接调用,也就是在setTimeout这个函数没有执行的时候,go()就已经执行了;这样的话当第一次执行go()这个函数,并到 setTimeout(go(),interval)这行代码块时,go()在setTimeout还没执行时,它就执行了,这时go()再次被调用,这时图片位移发生变化,由于

这个函数没有返回值或者返回值不是可执行的函数或者其他的代码,所以只是图片位移发生变化,setTimeout没有执行任何函数(也就是说如果这个go函数返回一个函数的话,那么setTimeout就会执行返回那个函数);

然后又到了 setTimeout(go(),interval)这行代码块,这时go()再次被调用,接下来情况如上次一样;以后一直这样,直到满足(speed <0 && parseInt(list.style.left) >newleft || speed > 0 && parseInt(list.style.left) < newleft)这个条件时, list.style.left = parseInt(list.style.left) + offset + 'px';也就是图片到达目的地。所以当你 写成setTimeout(go(),interval)时,你会发现图片直接跳转,而没有缓慢的动画过程,因为setTimeout没有执行go这个函数过,那就不会有每隔一个interval,位移发生一点变化直到到达目的地这回事了,而是直接到达目的地。

1 回复 有任何疑惑可以回复我~

这样写setTimeout(go,interval)和这样写setTimeout("go()","interval()")是一样的。——个人见解,仅供参考

0 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消

定时器函数为什么不加括号 go为什么不加括号

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信