王新阳

wangxinyang

js的传值与传址

传值:
var a = 5,b = a;
b = 8;
alert( a);

这时你发现返回5,即a的值根本没有变化,传值是Javascript基本数据类型(数字、字符串、布尔值)被操作的过程,在值被操作过程中,对实际的值做了一份copy,这份copy存在了另一个变量或对象属性或数组元素中,copy的值和原来的值是两份完全独立的值,如果修改了copy的值,那么原值并不会发生改变。

传址:
var obj1=new Object(),obj2 = obj1
obj1.name = "asdsadas";
alert(obj2.name);

这时你会发现返回了asdsadas,可明明修改的是obj1中的name,obj2的name怎么也跟着变化了?传址在Javascript中主要指针对引用类型(对象、数组、函数)的值的操作过程,obj2 = obj1; 这一句将obj1赋值给了obj2,这样也会将原值copy一份放到新变量的空间中,不同的是,这个值的副本实际上是一个指针,指针指向原值的对象,当改变其中任一个变量(或对象的属性)时,另一个的值也会发生变化。


作者:丁小倪
链接:https://www.zhihu.com/question/20133110/answer/14081804
2018-03-02
2024-05-06 星期一 农历三月二十八