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