这个函数不应该是无限递归下去吗,为什么会有终值(文本框里的数)?
function startCount() {
document.getElementById('count').value=num;
num=num+1;
startCount();
}
function startCount() {
document.getElementById('count').value=num;
num=num+1;
startCount();
}
2018-07-27
你这种用法是无限递归,当函数执行第一层时,占用一层栈,发现得执行第二层,又占用第二层栈,就这样一直调用下去,但是js给函数提供可使用的栈是有限的,当给函数使用的栈层数达到最大值时栈就会溢出,函数就不能往下再调用了,所以也不会执行到num=num+1;这句代码,所以num值就不再改变。
如果使用setTimeout();它的作用是将函数延时1S执行,在等待这1S的过程中,上一次调用startCount()早就结束了,占用的栈也就随着函数调用结束而释放,当过了一秒后,自动又执行startCount();然后无限循环下去,所以从始至终,这种用法只会占用一层栈,函数却能调用无数次,所以num值即使要受影响也只是数据类型溢出的影响。
举报