论JS函数传参时:值传递与引用传递的区别

JS中数据类型分为两种:基本数据类型(undefined,null,Number,object,String,Boolean)和复杂数据类型(对象)

      而两种数据类型的参数传递方式也不同:分别采用值传递 和 引用传递

                 1.  值传递:不区分地址和值,直接通过地址就可以找到内容

                                如:   var a = 10;

                                       var b = a;

                                          b = 20;
                                   console.log(a);   // 10
                                    console.log(b);  // 20

                          将变量a的值赋给了b,那么当b的值发生了改变时,a变量的值不会随着b发生改变,这就叫值传递

               2.   引用传递的数据:区分地址和值,需要通过所在的地址找到对应的内容

                              如:  var arr1 = [1,2,3];
                                       var arr2 = arr1;

                                      arr2[1]="hhhh";

                                      console.log(arr2);   // [1,"hhhh",3] 

                        首先,定义了一个数组arr1,将arr1的地址赋值给arr2时,仅仅是将arr1的地址赋值给了arr2,也就是说当arr1的数据发生改变时,数组arr2地址指向的数组arr1中 的数据发生了改变,arr2中保存的地址的内容发生了改变,这种叫引用传递。

 总结:值传递的数据,地址和值是一个内容,所以在拷贝之后,改变新的,不会影响老的。 引用传递是说,地址和值是两个部分,在默认的情况下,只复制了地址,并没有复制值,此时,两个地址指向了同一个值,修改了新的值,并且影响了之前的值。这个叫引用数据的浅拷贝。

原文地址:https://www.cnblogs.com/daydayup-98282/p/12344082.html