我尝试创建一个递归函数来迭代数据集,但它无法正确突破并且是无限的
<强> jsfiddle 显示的代码
var data = [{a: 1,b: 1}, {a: 2,b: 2}],z = 0;
function some(a, b, cbk) {
console.log(a + ':' +b);
cbk();
}
function main() {
var cbk = function () {
if (z < data.length) {
main();
} else {
console.log('end');
}
z++;
}
some(data[z].a, data[z].b, cbk);
}
main();
为什么这是一个无限循环?
最佳答案
这里发生的一些事情导致涉及迭代控制的递归失败。从 z = 0
开始,并与 .length
进行比较, z
需要在条件检查之前预先增加 if( z < .length )
。
原因是,沿着递归路径,z 永远不会递增,因此递归是无限的,导致页面锁定。因此,需要在递归调用之前处理 z,最好是在与 .length 进行比较之前。
在您的原始版本中,这不仅发生在 if 语句之后,而且还发生在递归调用之后。修复此迭代器将修复您的递归。
if (++z < data.length) {
关于javascript - 为什么这个递归函数不停止?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22865698/