老师,为什么《JavaScript高级程序设计》里说,函数的参数是按值传递的呢?书里的实例代码如下:
function setName(obj) { obj.name = "Nicholas"; obj = new Object(); obj.name = "Greg"; } var person = new Object(); setName(person); alert(person.name);//=>"Nicholas"
-
把代码再改下,看的清楚一些
function setName(obj) {
obj.name = "Nicholas";
obj = new Object();
obj.name = "Greg";
alert(obj.name);
alert(person.name);
}
var person = new Object();
setName(person);
alert(person.name);//= >"Nicholas"
在setname中,第一个obj是带入的person全局变量
因为obj定义了其子属性,所以实际上修改的是person的值,如果不是子属性则该规则在此处无效
然后又重新定义了一个obj=new Object();这个定义是发生在函数里面的
因此它的作用域就在函数内部,后面对obj.name赋值,则是对内部变量的赋值
当setName方法结束后,obj的也被清理出内存,而全局变量person则保留