做前端开发有一段时间,对一些相关概念有了一定的认识。但是,秉着“勿在浮沙筑高台”的态度,我又返回来看了看《JavaScript高级程序设计》这本书。
在看到“变量、作用域和内存问题”这一章时,书中说到:因为访问变量有按值和按引用两种方式,而参数只能按值传递。
示例:
function setName(obj){
obj.name = "Nicholas";
obj = new Object();
obj.name = "Grag";
}
var person = new Object();
setName(person);
alert(person.name); //"Nicholas"
其实这个示例,我觉得已经说明了参数的传递的确是按值来传递的,哪怕是一个对象。
但我还是不太明白其中的原理,想象不出在内存中是怎样的。
还望,前端高手能够帮忙解读,解读。
obj
开始只是person
的一个副本,正如其他引用类型的复制一样,它和person
指向的是同一地址,但obj = new Object();
之后,obj
指向了另一块内存,与person
断开了联系,这就是重写。如果没有obj = new Object();
这一句,alert(person.name);
的结果将会是Grag