javascript - 为什么这个递归函数不停止?

标签 javascript recursion

我尝试创建一个递归函数来迭代数据集,但它无法正确突破并且是无限的

<强> 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();

为什么这是一个无限循环?

最佳答案

jsFiddle Demo

这里发生的一些事情导致涉及迭代控制的递归失败。从 z = 0 开始,并与 .length 进行比较, z需要在条件检查之前预先增加 if( z < .length )

原因是,沿着递归路径,z 永远不会递增,因此递归是无限的,导致页面锁定。因此,需要在递归调用之前处理 z,最好是在与 .length 进行比较之前。

在您的原始版本中,这不仅发生在 if 语句之后,而且还发生在递归调用之后。修复此迭代器将修复您的递归。

if (++z < data.length) {

关于javascript - 为什么这个递归函数不停止?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22865698/

相关文章:

javascript - 比较数组以检查序列

javascript - 带有查询的 Vue JS 嵌套路由

c++ - 使用递归在迷宫中找到路径

swift - swift 中运算符重载的规则不一致

c++ - PugiXML 从递归 xml_tree_walker 中提取数据

"partition"函数实现中的递归

javascript - Bootstrap 3 jquery 事件药丸更换事件

javascript - 为什么 isomorphic-style-loader 会抛出 TypeError : Cannot read property 'apply' of undefined when being used in unison with CSS-Modules

javascript - sagas 中的异步错误传播

c - 在C中的递归函数中使用free()函数