JS将一个对象赋值给除此而外一个变量,是地址传值吗
JS将一个对象赋值给另外一个变量,是地址传值吗?
<script>
function Person(){}
var p1 = new Person();
p1.age = 25;
var p2 = p1;
p2.age = 51;
document.write(p1.age); //51,证明是地址传值
p2 = null;
document.write(p1.age); //51,why?
</script>
按照第一个输出,证明是地址传值,两个变量同时指向内存的同一块地址?但是我将p2置为null,为什么p1.age还是为51?
------解决思路----------------------
var p1 = new Person();
这个表达式做了什么?
首先 new xxx() 就是在内存中创建了一个 object
var p1 = xxx 那个 现在 p1 这个变量保存了 这个object的地址
到这里开始 访问 p1 就是访问这个object
p1.age = 25; 这个 就是 object.age = 25
var p2 = p1; //这个吧p1 的值 赋予 p2 (因为p1 是指向一个对象的变量 所以 p2 现在 也指向 这个变量)
p2.age = 51; 这个就是 object。age = 51
//一直到这里位置
现在内存有一个对象 object(new Person()创建的) 2个变量 p1 p2 (都指向 那个 object)
p2 = null; /这里 p2 指向了null 但是p1 还是指向那个 object
所有 后面就。。。。
<script>
function Person(){}
var p1 = new Person();
p1.age = 25;
var p2 = p1;
p2.age = 51;
document.write(p1.age); //51,证明是地址传值
p2 = null;
document.write(p1.age); //51,why?
</script>
按照第一个输出,证明是地址传值,两个变量同时指向内存的同一块地址?但是我将p2置为null,为什么p1.age还是为51?
------解决思路----------------------
var p1 = new Person();
这个表达式做了什么?
首先 new xxx() 就是在内存中创建了一个 object
var p1 = xxx 那个 现在 p1 这个变量保存了 这个object的地址
到这里开始 访问 p1 就是访问这个object
p1.age = 25; 这个 就是 object.age = 25
var p2 = p1; //这个吧p1 的值 赋予 p2 (因为p1 是指向一个对象的变量 所以 p2 现在 也指向 这个变量)
p2.age = 51; 这个就是 object。age = 51
//一直到这里位置
现在内存有一个对象 object(new Person()创建的) 2个变量 p1 p2 (都指向 那个 object)
p2 = null; /这里 p2 指向了null 但是p1 还是指向那个 object
所有 后面就。。。。