標籤:java io ar cti div 代碼 javascript new
ECMAScipt中所有函數的參數都是按值傳遞的。也就是說,把函數外部的值複製給函數內部的參數,就和把值從一個變數複製到另一個變數一樣。
在向參數傳遞基本類型的值時,被傳遞的值會被複製給一個局部變數(形參,arguments對象中的一個元素)。而傳遞參考型別的值,會把這個值在記憶體的地址複製給一個局部變數,因此當局部變數的變化會反映在函數的外部。
Javascript代碼 :
function addTen(num){
num+=10;
return num;
}
var count=10;
var result=addTen(count);
aelrt(count); //20,沒有變化
aelrt(result); //30
Javascript代碼:
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"。
Javascript代碼:
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