function Person(name,age){
this.name = name;
this.age = age;
}
function change(person){
person.name = 'lisa'
person = new Person('Halson',19)
}
var p = new Person('Jason',18)
console.log(p.name)
change(p)
console.log(p.name)
控制台输出Jason
和lisa
原因:最开始,var p = new Person('Jason',18)
,因此p指向该对象的地址,所以,p.name = 'Jason'
。接下来,将p传入change
方法,相当于在方法内部var person = p
,此时,person对象也指向p所执行的地址,因此person也指向对象new Person('Jason',18)
。当更改person.name
时,等同于改变了p和person共同指向的对象的值Jason
。接下来,person = new Person('Halson',19)
将person指向了新的内存地址,即new Person('Halson',19)
。而此时,p的指向不变还是('lisa',19)
。
总结:当一个值等于一个对象时,只是指向了该对象的地址空间。