递归 与 js 对象的引用

<script>
    //递归
    function test(n) {
        if (n == 1) {
            return 1
        }
        console.log(n)
        return n * test(n - 1)
    }
    console.log(test(3))
    </script>
var obj={
            obj1:{
                obj2:{
                    obj3:{
                        obj4:{
                            name:'liujin'
                        }
                    }
                }
            }
        }

        function fn(o){
            if(typeof o != 'object'){
                return o;
            }
            for(var attr in o){
                console.log(attr)  
            }
            return fn(o[attr])
        }
        fn(obj)

结果: 

obj1
 obj2
 obj3
 obj4
 name

var obj={
obj1:{
obj2:{
obj3:{
obj4:{
name:'liujin'
}
}
}
}
}

function fn(o){
if(typeof o != 'object'){
return o;
}
for(var attr in o){
console.log(o[attr])
}
return fn(o[attr])
}
fn(obj)

结果:

Object {obj2: Object}
Object {obj3: Object}
Object {obj4: Object}
Object {name: "liujin"}
liujin

对象的引用

var a={
  m:  10
}

var b=a;

b.m=20;

alert(b.m)  //20
alert(a.m)  //20

对象的拷贝

<script>
var obj = {
    a : { b : 10 }
};

/*function copy(obj){  //浅拷贝
    
    var newObj = {};
    
    for(var attr in obj){
        newObj[attr] = obj[attr];
    }
    
    return newObj;
    
}*/

function deepCopy(obj){  //深拷贝

    if(typeof obj != 'object'){
        console.trace();
        return obj;
    }
    
    var newObj = {};
    
    for(var attr in obj){
        newObj[attr] = deepCopy(obj[attr]);
    }
    
    return newObj;
    
}

var obj2 = deepCopy(obj);

obj2.a.b = 20;

alert(obj.a.b);  //10
</script>

 

var deepCopy= function(source) {


var result={};

for (var key in source) {

result[key] = typeof source[key]===’object’? deepCoyp(source[key]): source[key];

}
return result;
}

转载于:https://my.oschina.net/u/3147332/blog/807085

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值