ECMAScipt中全部函数的参数都是按值传递的。也就是说,把函数外部的值复制给函数内部的参数,就和把值从一个变量复制到另外一个变量同样。javascript
在向参数传递基本类型的值时,被传递的值会被复制给一个局部变量(形参,arguments对象中的一个元素)。而传递引用类型的值,会把这个值在内存的地址复制给一个局部变量,所以当局部变量的变化会反映在函数的外部。java
function addTen(num){ 函数
num+=10; spa
return num; 设计
} 对象
var count=10; ip
var result=addTen(count); 内存
aelrt(count); //20,没有变化ci
aelrt(result); //30string
function setName(obj){
obj.name="Nicholas";
}
var person=new Object();
setName(person);
alert(person.name); //Nicholas
以上代码中建立一个对象,并将其保存在变量person中,而后这个对象被传递到setName()函数中被复制给了obj。
在这个函数内部,obj和person引用的是同一个对象。
若是是person是按引用传递的,那么person就会自动修改成指向其name属性为"Gred"的新对象。可是,当接下来再访问person.name时,显示的值仍然是"Nicholas"。
function setName(obj){
obj.name="Nicholas";
obj=new Object();
obj.name="Greg";
}
var person=new Object();
setName(person);
alert(person.name); //Greg(摘自javascript高级程序设计)
若是这是按值传递,那么下面代码又为何说是按引用传递?求高手解答
var obj1=new Object();
var obj2=obj1;
obj1.name="Nicholas";
alert(obj2.name); //Nicholas
obj1=new Object();
obj1.name="Greg";
alert(obj2.name); //Nicholas