我正在尝试让递归函数在jQuery中工作,但出现以下异常:
“未捕获的RangeError:超出了最大调用堆栈大小”
我的理解是,递归函数必须以某种方式无限运行,但是我无法弄清为什么会这样。谢谢...
jQuery.fn.reduceNumber = function(numberToReduce) {
if (numberToReduce < 10 || numberToReduce == 11 || numberToReduce == 22 || numberToReduce == 33){
return numberToReduce;
} else {
var newNumberToReduce = numberToReduce.toString().substring(0,1) + numberToReduce.toString().substring(1,2);
return ($(this).reduceNumber(newNumberToReduce));
}
}
$(document).ready(function(){
$("#foo").html($(this).reduceNumber(12));
});
最佳答案
因为您陷入了无限循环。您正在呼叫reduceNumber(12)
。由于它与第一个if()
语句不匹配,因此转到第二个:
var newNumberToReduce = numberToReduce.toString().substring(0,1) + numberToReduce.toString().substring(1,2);
导致
newNumberToReduce
成为...。12
!然后调用reduceNumber(12)
,一次又一次地执行相同的操作,直到超过最大堆栈大小为止。关于javascript - jQuery中的递归-命理学,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/27125613/