在《Javascript高级程序设计》中有个例子:
function setName (obj) {
obj.name = "Nic";
obj = new Object();
obj.name = "Gre";
}
var person = new Object();
setName(person);
alert(person.name); //"Nic"
这个我很不理解啊..主要不知道函数中的obj = new Object();
这句话执行后对obj会有什么影响啊?obj之后指向哪里啊?
这个和作用域没什么关系,这是关于JavaScript函数参数传递的问题。
由于参数是Object类型,是“copy of reference”,即对于参数内部值的修改影响外部值:
所以,外部的person.name修改为"Nic"了。
而对于参数本身的修改不会影响外部值(相当于obj和person中间的线断了,再也连不上了)
如果这样:
补充:对于原始类型,是“pass by value”,即修改参数不影响外部值。