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

把Timeout改为Interval,神奇现象:1 2 4 8数字极快速度翻倍地跳

setlnterval()本来就是隔一段时间运行一次,setTimeout()放在函数里也实现了无限循环的功能,前者更简单点啊,实际运用setInterval之后发现数字跳动是:1,2,4,8,16,32...还不是一秒一次而是超级快,一会儿浏览器就爆炸了,有大神说这是什么setInterval的累积效应,百度看不懂。下面代码是把例题中的Timeout改为了Interval,就出现了上面说的神奇现象。

<!DOCTYPE HTML>
<html>
<head>
<script type="text/javascript">
var num=0;
function numCount(){
 document.getElementById('txt').value=num;
 num=num+1;
 setInterval("numCount()",1000);
 }
</script>
</head>
<body>
<form>
<input type="text" id="txt" />
<input type="button" value="Start" onClick="numCount()" />
</form>
</body>
</html>


正在回答

1 回答

这个其实也很好理解的,点击开始按钮执行numCount()函数会立刻绑定一个计时器,计时器1秒后执行numCount()函数又会绑定一个计时器,也就是说1秒钟之后会有两个计时器,2秒钟是4个,每隔1秒计时器翻倍8,16,32...。每个计时器每隔1秒都会执行numCount()函数,同时也会使num值加1,num值也会越增越快,计时器有多少每次num值就增加多少,所以文本框中显示的就是1,1+2,1+2+4,1+2+4+8,1+2+4+8+16...

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

宝慕林5689754 提问者

为什么改成Timeout就是正常的,不出现这个现象呢?
2019-08-29 回复 有任何疑惑可以回复我~
#2

宝慕林5689754 提问者

为什么Interval会出现这个现象,Timeou就不会,他们在什么特性上的区别导致的?
2019-08-29 回复 有任何疑惑可以回复我~
#3

你又调皮 回复 宝慕林5689754 提问者

setTimeout(fun,1000)是1秒钟后执行,只执行一次,setInterval(fun,1000)是每隔1秒执行一次,会一直执行下去
2019-08-29 回复 有任何疑惑可以回复我~
#4

宝慕林5689754 提问者

1秒钟之后会有两个计时器,2秒钟是4个,每隔1秒计时器翻倍8,16,32...。这句看不懂,明明是一秒出现一个,怎么会翻倍地出现
2019-08-29 回复 有任何疑惑可以回复我~
#5

宝慕林5689754 提问者

Timeou怎么就不出现这个出现上面这个神奇现象
2019-08-29 回复 有任何疑惑可以回复我~
#6

你又调皮 回复 宝慕林5689754 提问者

setTimeout()执行完一次之后就会被清除掉,后面之所以会一直执行,是因为setTimeout()执行的函数又绑定了一个计时器,就是每隔1秒重新绑定一个计时器,之前的计时器清除,setInterval()执行完之后计时器会一直存在
2019-08-29 回复 有任何疑惑可以回复我~
#7

宝慕林5689754 提问者 回复 你又调皮

setTimeout(fun,1000)是1秒钟后执行,只执行一次,setInterval(fun,1000)是每隔1秒执行一次,会一直执行下去,前后半句话都一个意思啊,一秒一次
2019-08-29 回复 有任何疑惑可以回复我~
#8

你又调皮 回复 宝慕林5689754 提问者

setInterva()执行完函数之后会绑定一个计时器,此时两个计时器都会存在的,两个计时器1秒钟之后再执行函数,都会再绑定一个计时器,这时就是4个计时器了,这4个计时器1秒钟之后执行函数又都会绑定1个计时器,然后就是8个了,之后16,32,64...
2019-08-29 回复 有任何疑惑可以回复我~
#9

你又调皮 回复 宝慕林5689754 提问者

不是一个意思,setTimeout()只会执行一次,就是1秒钟之后执行函数(执行完之后就不存在这个计时器了),然后重新绑定一个计时器,同一时间只会存在1个计时器,num值每次只会+1
2019-08-29 回复 有任何疑惑可以回复我~
#10

宝慕林5689754 提问者 回复 你又调皮

我懂了!可以理解为Timeout执行完一次后,这个计时器就死亡了,下个计时器再出生,Interval出现一个计时器后,即使到了下一秒,上一个计时器还存在,他跟他后面的计时器一起都让num+1,不管过了多少秒,之前的计时器永生不灭,而且每个计时器都会生出一个孩子,一直跟着后面的计时器一直存在着
2019-08-29 回复 有任何疑惑可以回复我~
#11

你又调皮 回复 宝慕林5689754 提问者

恩,是这样的
2019-08-29 回复 有任何疑惑可以回复我~
#12

宝慕林5689754 提问者 回复 你又调皮

师傅 收了徒儿吧 (紧紧地抱住师傅粗壮的长满黑毛的大腿)
2019-08-29 回复 有任何疑惑可以回复我~
#13

你又调皮 回复 宝慕林5689754 提问者

我也是菜鸟一个
2019-08-29 回复 有任何疑惑可以回复我~
#14

宝慕林5689754 提问者 回复 你又调皮

老哥,其中一个变量添加属性和方法,另一个也会改变;但是如果给其中一个变量重新赋值就不会影响另一个了,那个问题也是你帮我解答的,留个家庭住址呗
2019-08-29 回复 有任何疑惑可以回复我~
#15

你又调皮 回复 宝慕林5689754 提问者

恩 私信你了
2019-08-29 回复 有任何疑惑可以回复我~
#16

qq_精慕门3321009 回复 你又调皮

666666666666666666666666666
2020-03-03 回复 有任何疑惑可以回复我~
查看13条回复

举报

0/150
提交
取消
JavaScript进阶篇
  • 参与学习       468060    人
  • 解答问题       21891    个

本课程从如何插入JS代码开始,带您进入网页动态交互世界

进入课程

把Timeout改为Interval,神奇现象:1 2 4 8数字极快速度翻倍地跳

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