先举一个生活中的例子,就是那个经典的《老和尚给小和尚讲故事》的故事:
从前有座山,山里有个庙,庙里有个老和尚给小和尚讲故事。
讲的是什么故事呢?
讲的是:
从前有座山,山里有个庙……
这就是无限递归了。
再来说一下你的程序发生无限递归的原因:
ajQuery 是一个函数。执行这个函数时,函数中的 return 语句会返回一个值。
它会返回什么值呢?
返回值是执行一个新的 ajQuery 函数的返回值,
那么这个新的 ajQuery 函数会返回什么值呢?
这个新的 ajQuery 函数会返回又一个新的 ajQuery 函数的返回值,
……
这是无限递归,也是一种死循环。
最后说一下发生溢出的原因:
每次执行 ajQuery 函数,
都会在结束前执行又一个新的 ajQuery 函数,
并等待它结束,然后自身才能结束。
每执行一个函数都要占用一些资源,只有函数结束后才有可能释放这些资源。
可是,在无限递归过程中,不断地执行一个又一个函数,却从不结束这些函数。
所以,占用的资源就会越来越多。
直到占用的资源超出了允许的范围,就溢出了!
两个循环括号里都是条件,语法不同而已。对while来说,它的条件是当i<5时循环执行大括号里的代码,所以必须在代码里加上i++作为条件限制,否则while将无限循环。
对for来说,更是一目了然,i初始值为1,每执行一次同时执行i++,当执行至i=11时,否决条件i<11,终止循环。
没太明白。你是需要一个无限循环吗?
可以做一个死循环,或者做一个计时器
死循环:
while(1){console.log("a")
}
计时器:
setInterval(function(){console.log("a")
},100)