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

函数中传递的参数,可以在函数内部通过 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;
   }
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 工厂模式类似于现实生活中的工厂可以产生大量相似的商品,去做同样的事情,实现同样的效果;这时候需要使用工厂模式。简单...
    舟渔行舟阅读 7,842评论 2 17
  • 1.引用类型有哪些?非引用类型有哪些 引用类型: 对象 object 数组 函数 正则非引用类型...
    怎么昵称阅读 253评论 0 0
  • 引用类型有哪些?非引用类型有哪些? JS中的数据类型分为基本类型和引用类型。基本类型:数值(number)、字符串...
    LeeoZz阅读 275评论 0 0
  • 基础类型有哪些?复杂类型有哪些?有什么特征?5种简单数据类型(基本数据类型):Undefined、Null、Boo...
    coolheadedY阅读 329评论 0 0
  • 317 . Shortest Distance from All Buildings 典型的BFS的题目,BFS可...
    健时总向乱中忙阅读 171评论 0 0