为什么这个回调函数被无限调用?

时间:2015-05-27 07:18:48

标签: javascript recursion infinite-loop

我递归调用一个函数,它的回调函数done()函数被无限调用,我不知道为什么。

当我记录i时,它达到数据的长度,然后满足条件并且它停止,但是无限调用done函数。 done函数不是递归的;为什么不止一次被召唤?当增量器等于数据长度并且定义了nTwo时,如何只调用一次?

我认为这可能是因为i的预增量,但是我需要它,否则我得到一个RangeError,超出最大堆栈。

function train(i, data, n, nTwo, func){
    console.log(i, i===data.length);
    if(i===data.length && nTwo===undefined) func();
    else if(i<data.length) (new Trainer(n)).workerTrain([data[i]], train(++i, trainingSet, l, y));
    else done();
}
function done(){
    console.log('first set of workers done');
    saveAs(new Blob([JSON.stringify(l.toJSON())], {type: "application/json"}), "l.json");
    train(0, yonTraining, y, undefined, finalTrainingCallback);
}

1 个答案:

答案 0 :(得分:0)

显然,函数train正在调用函数done,该函数再次调用函数train。然后函数train递增索引i,直到其值大于data.length,再次调用done函数