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

js中setInterval(fn, time) 在fn 中改变time,调用的事件间隔没有变?

js中setInterval(fn, time) 在fn 中改变time,调用的事件间隔没有变?

weibo_我是徐叉叉_0 2015-12-10 17:29:34
    var timer=null;     var sTime=500;     timer=setInterval(function(){         alert('a');         sTime+=500;         alert(sTime);     },sTime)alert(sTime) 每次都是逐渐增大,但是每次重新执行的间隔都没有变??
查看完整描述

3 回答

已采纳
?
慕男婶

TA贡献98条经验 获得超73个赞

是的。间隔并不会变。

 var timer=null;
 var sTime=500;
 var fn = function(){
     alert('a');
     sTime+=500;
     alert(sTime);
 }
 
 // setInterval只是一个函数,调用一次就执行一次,所以第一次调用时
 // sTime = 500,那么间隔就是500毫秒,虽然你在fn里改变了sTime的大小,但是setInterval并不会
 // 重复执行,重复执行的是fn,第一次调用setInterval就决定了其间隔是500毫秒
 var timer=setInterval(fn,sTime)

你的理解错误之处在于:你认为setInterval函数会500毫秒执行一次。正确情况其实是fn每隔500毫秒执行一次。setInterval只会执行一次,因为你只调用了一次。。

查看完整回答
2 反对 回复 2015-12-10
?
约定永远00

TA贡献1条经验 获得超0个赞

因为function里的sTime是局部变量,而时间间隔sTime是全局变量,所以不会受局部变量的影响

查看完整回答
反对 回复 2015-12-10
  • 慕男婶
    慕男婶
    function里的sTime其实也是全局变量,因为它并没有声明,根据作用域链的查找原则,在function中的sTime并没有定义,然后会往上层找,在上层(即全局环境)找到了sTime。。 function fn(){ // 如果前面有var,那么此时 sTime才是局部变量,因为有var相当于在function环境里新声明了一个变量 var sTime = 600; }
?
李晓健

TA贡献1036条经验 获得超461个赞

因为你的定时器一开就被启动起来了呀。又不一直不停的启动,所以你后面的值就没用了,想达到你的那种效果,你可以试试用setTimeout来启动定时,然后用递归调用就可以达到setInterval的一直执行的效果。

查看完整回答
反对 回复 2015-12-10
  • 3 回答
  • 0 关注
  • 1722 浏览
慕课专栏
更多

添加回答

举报

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