在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 問答/HTML/ js遞歸函數(shù)的疑惑

js遞歸函數(shù)的疑惑

1,這個(gè)遞歸函數(shù)返回這個(gè)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>

我的理解是這個(gè)函數(shù)在進(jìn)行遞歸調(diào)用自己的時(shí)候,把這個(gè)j的值修改改變?yōu)閇6,2,3,4,5],而最后return了這個(gè)j,最終返回結(jié)果是循環(huán)沒進(jìn)行到遞歸函數(shù)的數(shù)值,是不是進(jìn)行到遞歸函數(shù)之后無論如何改變這個(gè)j,只要是操作之前的數(shù)值,到最后遞歸完成之后還是不會(huì)改變?

回答
編輯回答
使勁操

<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>
    這樣的話就會(huì)結(jié)果就是原數(shù)組
2018年6月24日 15:26
編輯回答
北城荒

1,你希望返回什么值? [6,1,2,3,4,5]?
2, 這個(gè)遞歸每調(diào)用一次自身,其內(nèi)部定義了一個(gè)自己的 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);
2017年1月28日 16:40
編輯回答
乖乖瀦

copyarr里的j只是局部變量,執(zhí)行copyar(a)只會(huì)返回第一次的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當(dāng)成全局變量,就返回[6,2,3,4,5]
2017年7月25日 04:06
編輯回答
膽怯

你這個(gè)j數(shù)組會(huì)初始化多次啊 .

2018年7月16日 12:28