内存和拷贝

内存

  • 内存:栈内存 和 堆内存

1:只要声明一个变量;就会在【栈】中占一个内存
2; 基本类型的的VAR 在栈中;直接提供在变量上
3:引用类型的数值;数据存在堆中;同时提供给栈一个【地址】;指向堆中的数据
4:堆中有多个数据;就有多个【地址】
5: 栈中的变量;如果多个变量指向【同一个地址】,获取到的是【同一个堆内存中数据】
任何一个变量发生变化都会影响到【其它的变量】

拷贝
  • 深拷贝:抄袭者;当抄袭者者数据改变时;不会改变被抄袭者中的内容同时,当被被抄袭中中数据发生改变时;也不会影响到抄袭者中数据。说明抄袭者可以自食其力
  • 浅拷贝 拷贝后;抄袭者和被抄袭者相互影响
深拷贝引用类型数据
  • 数据:定义新的数组或者对象;将被拷贝的数据;
  • 遍历;添加到新数组中
深拷贝方法封装
   // 深拷贝数据组方法
        function deepArr(arr) {
            var arrCopy = []
            for (var i = 0, len = arr.length; i < len; i++) {
                arrCopy.push(arr[i])
            }
            return arrCopy;
        }

        // 深拷贝对象
        function deepObject(obj) {
            var objCopy = {};
            for (x in obj) {
                objCopy[x] = obj[x];
            }
            return objCopy;
        }
        // 深拷贝引用类型数据
        function deepData(data) {
            if (data.constructor.name === 'Array') { // 为数组
                var arrCopy = []
                for (var i = 0, len = data.length; i < len; i++) {
                    arrCopy.push(data[i])
                }
                return arrCopy;
            } else { // 为对象
                var objCopy = {};
                for (x in data) {
                    objCopy[x] = data[x];
                }
                return objCopy;
            }
        }

对象实现深拷贝:

/**
         * 引用类型数据原理
         * 在堆中多存一个数据,让这个数据
        */
        var obj = {
            name: 'nn',
            age: 11
        }
        var copyObj = {};
        for (x in obj) {
            copyObj[x] = obj[x];
        }
        copyObj.dec = '哈哈';
        console.log(obj);
        console.log(copyObj);

数组实现深拷贝:

/**
         * 数组深拷贝
         * 1:声明一个空数组,在堆中新存一个数据
         * 2:遍历另一个数组,获取到每一个数据
         * 3:将获取到的数据,添加到空数组中,完成拷贝
         * 因为arr与copyArr变量,存的是不同的指针,所以改变不受影响
        */
        var arr = [1,2,3,4];
        var copyArr = [];
        for(var i = 0 ; i < arr.length ; i++){
            copyArr.push(arr[i]);
        }
        copyArr.push('哈哈');
        console.log(arr);
        console.log(copyArr);
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值