javascript递归函数赋值问题

1.为什么这个j里面赋值是无限嵌套。想不明白,希望大家帮我一下。

<!DOCTYPE html>
<html>

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

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

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

</html>

图片描述

阅读 3k
3 个回答

因为你的j是全局变量

因为
copyarr方法return j;
所以
j[i]=copyarr(obj[i]);
相当于
j[i]=j;

j是全局的,所以j[i]包含了j之前的数据

所以把

var j = [];
function copyarr(obj) {

改为

function copyarr(obj) {
var j = [];

你每次都是操作的同一个数组

你每次递归进去都用的是函数外面的 变量 j,这样做是错的。

你应该在函数里面定义 j

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题