美文网首页
函数参数传递中的浅拷贝和深拷贝

函数参数传递中的浅拷贝和深拷贝

作者: Hunter_Gu | 来源:发表于2016-12-21 23:43 被阅读67次

函数中传递的参数,可以在函数内部通过 arguments 这个类数组对象进行访问。

    function foo(a,b){
        console.log('a = ' + arguments[0]);
        console.log('b = ' + arguments[1]);
    }
    foo(1,2);//a = 1  b = 2
  • 1.基本类型拷贝时:
    以传递字符串为例:
    var a = 1;
    var b = a;
    a = 2;
    console.log(b);//1    b 不会随着 a 的改变而改变,仍然为1
  • 2.复杂(引用)类型拷贝时:
    var obj1 = {"name": "Couzin",
                "age": 22
            };
    var obj2 = obj1;
    obj1["name"] = "Hunter";
    console.log(obj2['name']);//"Hunter"

引用类型的本质是:变量中保存的是指针,指针指向内存中的位置,该位置保存着对象。
引用类型有:对象、函数、数组、正则。


  • 函数中参数的传递
  • 简单类型
   function sum(num){
/*助于理解
       var num = count;
*/
       return (num + 10);
   }
   var count = 20;
   sum(count);
   console.log(count);//count 的值不会改变
  • 复杂(引用)类型
   function modifyObj(obj){
/*助于理解
       var obj = obj1;
*/
       obj.age = 22;
   }
   var obj1 = {
       "name": "Couzin",
       "age": 10
   };
   modifyObj(obj1);
   console.log(obj1);//改变了 {name: "Couzin", age: 22}

所以,对于引用类型,需要避免在拷贝后发生的这种情况。

  • 浅拷贝 和 深拷贝
  • 浅拷贝,以数组为例
   function getArr(arr){
       var arrtemp = [];
       for(var i = 0;i < arr.length;i ++){
           arrtemp[i] = arr[i];
       }
       return arrtemp;
   }

这种方法只能拷贝一层,即 [1,2,3] 类型的对象;对于 [1,2,[a,b]] 类型的对象是无效的。

  • 深拷贝
   function copyObj(arr){
       var arrtemp = [];
       for(var i = 0;i < arr.length;i ++){
           if((typeof arrtemp[i]) === "object"){
               arrtemp[i] = copyObj(arr[i]);
           }else{
               arrtemp[i] = arr[i];
           }
       }
       return arrtemp;
   }

相关文章

  • js 浅拷贝与深拷贝函数

    参数p 为parent 父类,参数c为child子类 浅拷贝函数 深拷贝函数(即递归调用浅拷贝)

  • 函数参数传递中的浅拷贝和深拷贝

    函数中传递的参数,可以在函数内部通过 arguments 这个类数组对象进行访问。 1.基本类型拷贝时:以传递字符...

  • C++语言基础(02)

    1.可变参数 2.构造函数、析构函数、拷贝构造函数 构造函数 拷贝构造函数 //浅拷贝(值拷贝)问题 //深拷贝

  • C++ 浅拷贝和深拷贝

    浅拷贝 深拷贝 场景如下 A、栈区中,子函数return 对象,进行赋值操作;B、栈区中,传递对象给子函数进行传递...

  • 2019-10-27

    深拷贝和浅拷贝 浅拷贝 切片[:]操作 和copy()函数相同,都是浅拷贝。示例:copy()函数说明:c拷贝一个...

  • Java深拷贝和浅拷贝的区别

    一、深拷贝和浅拷贝的区别 浅拷贝:对基本数据类型进行值传递,对引用数据类型进行引用传递般的拷贝,此为浅拷贝。 深拷...

  • [C++之旅] 15 深拷贝与浅拷贝

    [C++之旅] 15 深拷贝与浅拷贝 拷贝构造函数分为深拷贝和浅拷贝两种方式 浅拷贝只是将被拷贝的对象的成员直接赋...

  • Objective-C中的浅拷贝和深拷贝

    Objective-C中的浅拷贝和深拷贝 Objective-C中的浅拷贝和深拷贝

  • Python 进阶内容整理

    Python 之禅 参数传递是值传递还是引用传递 深拷贝与浅拷贝 垃圾回收机制 del 元类 (metaclass...

  • JS中的深拷贝与浅拷贝

    知乎:js中的深拷贝和浅拷贝? 掘金: js 深拷贝 vs 浅拷贝 前言 首先深拷贝与浅拷贝只针对 Object,...

网友评论

      本文标题:函数参数传递中的浅拷贝和深拷贝

      本文链接:https://www.haomeiwen.com/subject/vfdcvttx.html