对象的引用

复制关系(基本类型:字符串,数字,布尔值,null,undefined)
eg:

    var a=5;
    var b=a;
    b+=3;
    alert(a)//5;

引用关系(对象与函数)
eg 1:
var a=[1,2,3];
var b=a;
b.push(4);
alert(a);//[1,2,3,4]
解释:a,b共用同一天地址,然后b在地址上修改了,所以a也改变了。

eg 2:
var a=[1,2,3]
var b=a;
b=[1,2,3,4];
alert(a);//[1,2,3,4]
alert(b);//[1,2,3,4]
解释:a,b共用同一条地址,然后b重新赋值,上面是修改b,这里是又创建了一个b,为一条新的地址,与a无关了。
应用:浅拷贝与深拷贝
浅拷贝:

function copy(){
        var newObj = {};
        for(var attr in obj){
            newObj[attr]=obj[attr];
        }
        return newObj;
    }
情况一:
    var obj={a:10};
    var obj2=copy(obj)
    obj2.a=20;
    alert(obj.a);//10
情况二:
    var obj={a:{b:10}};
    var obj2=copy(obj);
    obj2.a.b=20;
    alert(obj.a.b);//20
原因:浅拷贝,只拷贝了一层,是{b:10},为对象,所以还是引用关系。

深拷贝:
递归:函数调用函数自身,执行递的动作。
最后一次判断一个终止条件,可以执行归的动作。
应用:阶乘

        function test(){
            if(n == 1){
                 return 1;
            }
            return n*test(n-1);
         }
         test(4);//24

深拷贝:

    function deepcopy(obj){
        if(typeof(obj) != 'object'){
            return obj;
        }
        var newObj={};
        for(var attr in obj){
            newObj[attr]=deepcopy(obj[attr]);
        }
        return newObj;
    }
    var obj={a:{b:10}};
    var obj2=deepcopy(obj);
    obj2.a.b = 20;
    alert(obj.a.b);//10
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值