为什么这个回调函数会被无限调用?
Why is this callback function being called infinitely?
我正在递归调用一个函数,它的回调 done() 函数被无限调用,我不知道为什么。
我log i的时候,达到data的长度,满足条件就停止了,但是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);
}
很明显,函数 train
正在调用函数 done
,后者再次调用函数 train
。然后函数 train
递增索引 i
直到它的值大于 data.length,再次调用 done
函数
我正在递归调用一个函数,它的回调 done() 函数被无限调用,我不知道为什么。
我log i的时候,达到data的长度,满足条件就停止了,但是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);
}
很明显,函数 train
正在调用函数 done
,后者再次调用函数 train
。然后函数 train
递增索引 i
直到它的值大于 data.length,再次调用 done
函数