论论JS函数传参时函数传参时:值传递与引用传递的区别值传递与引用传递的区别
首先讨论函数之前,先弄清楚基本类型值与引用类型值的复制问题
一、数据类型的复制分析一、数据类型的复制分析
内存分为栈区(内存分为栈区(stack)和堆区()和堆区(heap)) ,如果将内存看成一本书,栈好比是书的目录,而堆就是书的内容,基本类型可以看成内容非常少,只要目录就可以概括,而引用类型就相
当与内容非常多的文章,需要在书的目录上保存一个地址,然后根据书的地址再找内容。
基本数据类型:Undefined、Null、Boolean、Number、String
引用数据类型:对象对象
1.基本类型的复制基本类型的复制
当基本类型的A给另一个基本类型B赋值时,会在栈里面创造一个空间,将A的值值,复制一份,放在B上。
var A=5;
var B=A;
在内存示意图如下:
2.引用类型的复制引用类型的复制
当一个引用变量obj1赋值给另一个引用变量obj2时,先将栈里创造一个空间,然后将obj1在栈里面保存的地址地址,复制一份给了obj2,那么obj1和obj2就根据相同地址,在堆中查找到
同一份的内容。
var obj1=new Object();
var obj2=obj1;//俩个引用指向了同一个地址
obj1.name="L_DoubleYang";//添加obj1一个name,那么指向同一片内容的obj2也一样
console.log(obj2.name);//结果为:L_DoubleYang