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

这个函数不应该是无限递归下去吗,为什么会有终值(文本框里的数)?

function startCount() {
    document.getElementById('count').value=num;
    num=num+1;
    startCount();
  }

正在回答

4 回答

你可以设置小于多少 就不循环了

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

你这种用法是无限递归,当函数执行第一层时,占用一层栈,发现得执行第二层,又占用第二层栈,就这样一直调用下去,但是js给函数提供可使用的栈是有限的,当给函数使用的栈层数达到最大值时栈就会溢出,函数就不能往下再调用了,所以也不会执行到num=num+1;这句代码,所以num值就不再改变。

https://img1.sycdn.imooc.com//5b7a4aec0001384903730128.jpg

如果使用setTimeout();它的作用是将函数延时1S执行,在等待这1S的过程中,上一次调用startCount()早就结束了,占用的栈也就随着函数调用结束而释放,当过了一秒后,自动又执行startCount();然后无限循环下去,所以从始至终,这种用法只会占用一层栈,函数却能调用无数次,所以num值即使要受影响也只是数据类型溢出的影响。

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

光大帅气___

谢谢!说的真明白!受教了
2018-09-03 回复 有任何疑惑可以回复我~

是无限循环的吧,但是你递归的时候没有延迟呀,直接就递归到最大值然后报异常了吧

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

你没有定义循环


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

qq_执着Paranoid_0 提问者

定义循环?没有递归出口不应该是无限循环吗?
2018-07-27 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消

这个函数不应该是无限递归下去吗,为什么会有终值(文本框里的数)?

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