JavaScript递归不会恢复

时间:2017-04-30 10:22:15

标签: javascript recursion

这是我在Google Chrome版本58.0.3029.81(64位)(Windows 10 x64)上运行的脚本

 ArrayList sortArrayList= arrayList;

 sortArrayList.Sort();

 sortArrayList.Reverse();

 return sortArrayList[0];

此脚本应打印

<script>  
var givenArray = [23, 6, [2, [6, 2, 1, 2], 2], 5, 2];
var printArray = function (start, array) {
    for (i = 0; i < array.length; i++) {
        if (Array.isArray(array[i])) {
            printArray(start + 1, array[i]);
        }
        else {
            for (j = 0; j < start; j++) {
                document.write("&nbsp;&nbsp;&nbsp;&nbsp;");
            }
            document.write(array[i] + '<br/>');
        }
    }
};
printArray(0, givenArray);
</script>

但它只是打印

23
6
    2
        6
        2
        1
        2
    2
5
2

我的意思是,在递归调用外部for循环结束或函数返回之后。
这有什么问题?

1 个答案:

答案 0 :(得分:4)

您正在使用所有j来电共享的全球printArrayvar。使用i制作jvar printArray = function (start, array) { for (var i = 0; i < array.length; i++) { // ^^^^ here if (Array.isArray(array[i])) { printArray(start + 1, array[i]); } else { for (var j = 0; j < start; j++) { // ^^^^ and here document.write("&nbsp;&nbsp;&nbsp;&nbsp;"); } document.write(array[i] + '<br/>'); } } }; 本地:

{{1}}

永远不要在没有声明的情况下使用变量,除非你希望它们是全局变量。