Javascript中的递归会停止,而不会完成先前的for循环

时间:2019-01-05 07:59:31

标签: javascript recursion

我想递归遍历一棵树,但是递归函数一旦到达最深的嵌套元素就停止了,而不是完成它之前的所有其他循环。我在下面复制了问题,并得到了输出:

1
[2, [3, [4, 5], 6], 7]
2
[3, [4, 5], 6]
3
[4, 5]
4
5

当我应该得到这个时:

1
[2, [3, [4, 5], 6], 7]
2
[3, [4, 5], 6]
3
[4, 5]
4
5
6
7
8

任何帮助将不胜感激。

function recurse(lst) {
    for (i=0; i<lst.length; i++) {
        console.log(lst[i]);
        if (Array.isArray(lst[i])) {
            recurse(lst[i]);
        }
    }
}

recurse([1, [2, [3, [4, 5], 6], 7], 8]);

1 个答案:

答案 0 :(得分:0)

您可以使用let声明循环变量 i ,该变量将声明块作用域局部变量:

function recurse(lst) {
    for (let i=0; i<lst.length; i++) {
        console.log(lst[i]);
        if (Array.isArray(lst[i])) {
            recurse(lst[i]);
        }
    }
}

recurse([1, [2, [3, [4, 5], 6], 7], 8]);