我正在尝试让递归函数在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/

10-10 07:57