1. 程式人生 > >js 函式引數按值傳遞的理解

js 函式引數按值傳遞的理解

例子選自《javas高階程式設計》

1.基本型別按值傳遞

function addTen(num) {
num += 10;
return num;
}
var count = 20;
var result = addTen(count);
alert(count); //20,沒有變化

alert(result); //30

在執行addTen(count)時,將20這個值複製一份傳遞到了num中,addTen執行後,num為30,於是result等於30,而count依然是20

2. 引用型別值的傳遞

function setName(obj) {
obj.name = "Nicholas";
obj = new Object();
obj.name = "Greg";
}
var person = new Object();
setName(person);

alert(person.name); //"Nicholas"

setName執行後,將person的引用複製一份,使得引數中的obj指向了與person相同的引用,此時修改obj.name的值,person.name也會變,接下來再將obj指向一個新的物件,這個時候person和obj已經沒有關係,person.name的值不會改變

總結:函式引數傳遞過程中之所以說傳遞值,即相當於複製了一份給引數;假如是引用,則函式中的引數和傳入值完全是同一個值,那麼後面對obj修改,person的值都會隨之改變,而驗證結果並沒有因為obj指向了新物件就變,所以引用的傳遞還是按值傳遞,或者說,把引用的地址複製了一份給引數