繁体   English   中英

具有递归自调用的重写函数,以便解决RangeError最大调用堆栈大小

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM