关于数据类型的储存,以及数组深复制浅复制,函数的值传递和引用传递的问题学习

数据内存的储存        

        基本数据类型存储在栈内存

                   变量存储的就是值(var a = 2 ;var b = a ;)

                   给b赋予了a的值,之后b变化不会影响a;

        引用数据类型存储在堆内存

                   变量存储的是地址(var arr = [1,2,3] ;var arr2 = arr ;)

                   给b赋予了a储存值的地址,之后b的地址中的内容变化会影响a;

数组的深复制/浅复制

数组的浅复制:只复制了地址 (共享地址)

数组的深复制:复制值

   数组的深复制可以通过以下两种方式实现:

           遍历(把原数组中的值存入新的数组)  var arr2 = [] ;

           slice()  截取数组中的所有值,得到的是一个新数组

        var arr = [1,2,3,4,5] ;

        // 数组的浅复制 --- 只是复制了地址
        // 
        var arr2 = arr ;

        // 数组的深复制  --- 复制数组中的值

        // 开了新的房间  609


        var arr3 = arr.slice() ;
        console.log(arr3);

        arr3.push('a') ;

        console.log(arr);


        //改变同一地址时arr4和arr5都会改变
        var arr4 = [1,2,3] ;
        var arr5 = ['a' , 'b'] ;
        arr4 = arr5 ;
        console.log(arr4);
        arr5.push('c') ;
        console.log(arr4);
        arr4.push(1) ;
        console.log(arr5);

函数传参时

           基本数据类型传递是值

           引用数据类型传递的是地址(形参和实参共享地址)

              因此在封装函数的时候,

                  如果想改变原数组,就直接操作形参

                  如果不想改变原数组,就实现深复制,然后操作新的数组

        var a = 1 ;

        function fn(n) {
            // n = a ;  
            n++ ;
        }

        fn(a) ;  // 普通数据类型只是传递了值过去
        console.log(a);


        var arr = [1,2,3] ;

        function fn2(arr2) {  
            // arr2 = arr 
            arr2.push('a')
        }

        fn2(arr) ;
        console.log(arr);
        function pop(arr) {  
            // arr = arr3 ; // 608
            var newArr = [] ;  // 609
            for(var i = 0 ; i < arr.length - 1 ; i++) {
                newArr.push(arr[i])
            } 
            // arr = newArr ;  // arr 609
            return newArr
        }
        var arr3 = [6,7,4,2,9,1] ;  // 608
        var res = pop(arr3) ;
        console.log(res);
        console.log(arr3);
        arr3 = res ;

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值