js递归函数的疑惑

1,这个递归函数返回这个j=[1, 2, 3, 4, 5]

<!DOCTYPE html>
<html>

    <head>
        <meta charset="UTF-8">
        <title></title>
    </head>

    <body>
        <script type="text/javascript">
            var a = [1, 2, 3, 4, 5, [6, 2, 3, 4]];

            function copyarr(obj) {
                var j = [];
                for(var i = 0; i < obj.length; i++) {
                    if(typeof obj[i] == 'object') {
                        copyarr(obj[i]);
                    } else {
                        j[i] = obj[i];
                    }
                }
                return j;
            }
            var j = copyarr(a);
            console.log(j) //
        </script>
    </body>

</html>

我的理解是这个函数在进行递归调用自己的时候,把这个j的值修改改变为[6,2,3,4,5],而最后return了这个j,最终返回结果是循环没进行到递归函数的数值,是不是进行到递归函数之后无论如何改变这个j,只要是操作之前的数值,到最后递归完成之后还是不会改变?

阅读 2.2k
4 个回答

copyarr里的j只是局部变量,执行copyar(a)只会返回第一次的j

var a = [1, 2, 3, 4, 5, [6, 2, 3, 4]],
    j = []

function copyarr(obj) {
    for (var i = 0; i < obj.length; i++) {
        if (typeof obj[i] == 'object') {
            copyarr(obj[i]);
        } else {
            j[i] = obj[i];
        }
    }
}
copyarr(a)
console.log(j) // 把j当成全局变量,就返回[6,2,3,4,5]

你这个j数组会初始化多次啊 .

1,你希望返回什么值? [6,1,2,3,4,5]?
2, 这个递归每调用一次自身,其内部定义了一个自己的 j, 并返回,但是外表并没与接收。

var a = [1, 2, 3, 4, 5, [6, 2, 3, 4]];
var j = [];
function copyarr(obj,target) {
    for(var i = 0; i < obj.length; i++) {
        if(typeof obj[i] == 'object') {
           copyarr(obj[i],target);
         } else {
            target.indexOf(obj[i]) === -1 && (target[i] = obj[i]);
         }
    } 
}
copyarr(a,j);
console.log(j);
新手上路,请多包涵

<script type="text/javascript">

        var a = [1, 2, 3, 4, 5, [6, 2, 3, 4]];

        function copyarr(obj) {
            var j = [];
            for(var i = 0; i < obj.length; i++) {
                if(typeof obj[i] == 'object') {
                    j = j.concat(copyarr(obj[i]));//[6, 2, 3, 4]
                } else {
                    j[i] = obj[i];
                }
            }
            return j;
        }
        var j = copyarr(a);
        console.log(j) //
    </script>
    这样的话就会结果就是原数组
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题