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