![](/img/trans.png)
[英]javascript recursive function: Uncaught RangeError: Maximum call stack size exceeded
[英]Rewriting function with recursive self-calls so that RangeError Maximum call stack size is resolved
我有一个可以自我调用的函数,但看不到任何潜在的无限循环,并且仅在计数器小于数组长度的情况下运行循环。
有谁知道为什么调用堆栈大小会引发错误?
function train(i, data, n, nTwo, func){
if(i===data.length && nTwo!==undefined) done();
else if(netTwo===undefined) func();
else (new Trainer(n)).workerTrain([data[i]], train(i++, trainingSet, l, y));
}
train(0, trainingSet, l, y);
我无法在for循环中运行此程序,因为在上一个操作完成之前,我可以启动工作程序。 或者至少当我尝试时,出现错误。 因此,我正在上一个工作程序的回调函数中运行下一个工作程序。
您正在使用后递增运算符( i++
),该运算符将在递增变量之前返回当前值。 换句话说,您总是使用相同的i
来调用函数。
使用pre-incremenet( ++i
)应该可以解决此问题:
else (new Trainer(n)).workerTrain([data[i]], train(++i, trainingSet, l, y));
netTwo未定义。 nTwo是函数中的参数,并在第一个if子句中使用。 但是else if子句有一个名为“ netTwo”的未定义变量。 因此,我希望有一个问题。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.