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

怎么理解这里出现的问题?

怎么理解这里出现的问题?

我要冲钱 2017-05-04 18:36:12
<script type="text/javascript">   var num=0;   var i;   function startCount(){     clearTimeout(i)     document.getElementById('count').value=num;     num=num+1;     i=setTimeout("startCount()",1000)       } </script>主要问题是clearTimeout();这样的,如果像上面那样写,那么就正常了,无论我在外面多少次调用这个函数,他的运行都是正常的,不会叠加。但如果变成这样-----------<script type="text/javascript">  var num=0;  function startCount(){    clearTimeout(i)    document.getElementById('count').value=num;    num=num+1;     var i=setTimeout("startCount()",1000)  }</script>就是i变成局部变量,就出现问题了,多次调用函数会叠加,这是怎么理解了?变成局部变量也应该不会影响clearTimeout()的工作吧??
查看完整描述

2 回答

已采纳
?
会飞的四脚蛇

TA贡献5条经验 获得超3个赞

多次调用 startCount,

你的第一段代码,i放在函数外部,每次运行函数时都会清除上一个定时器,结果是只有最后一个定时器在起作用,

第二段代码,i局部变量,每次运行函数,i就会初始化一次,clearTimeout(i)在这里是不起作用的,开一个定时器,但并不会清除,结果是num的值被4个定时器影响叠加。

查看完整回答
反对 回复 2017-05-04
  • 我要冲钱
    我要冲钱
    每次调用函数,函数里面声明的变量都会初始化吗?
  • 会飞的四脚蛇
    会飞的四脚蛇
    不累加的那段代码的i都会初始化,只要函数调用,clearTimeout(i)中,i都是undefined,你可以在控制台里打断点调试观察函数调用栈
?
想成为攻城师的筱筱

TA贡献15条经验 获得超22个赞

第一眼看见的是你粘贴的代码中有两行少了分号,是粘贴的问题还是程序中就忘记写了?

查看完整回答
反对 回复 2017-05-04
  • 我要冲钱
    我要冲钱
    嗯,我是ctrlc出来的,不过这应该不是问题所在
  • 2 回答
  • 2 关注
  • 1787 浏览
慕课专栏
更多

添加回答

举报

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