2012-02-24 64 views
0

可能重複:
JavaScript Pass Variables Through Reference功能(PARAM) - 像PHP

你怎麼能做到在JavaScript這樣的事情?

在PHP中,你可以把一個&放在參數前面的函數中直接寫回變量..你怎麼能在javascript中做這樣的事情?

+1

其所謂路過全球化志願服務青年。 – Iznogood 2012-02-24 16:27:03

+0

你不可能。所有對象都作爲引用傳遞,因此您可以修改要傳遞的對象,但不能修改它存儲的位置。 – zzzzBov 2012-02-24 16:27:31

回答

2

在JavaScript中,值按值傳遞給函數。但是,對象通過引用傳遞。

傳遞值:

function myfunction(x) 
{ 
     // x is equal to 4 
     x = 5; 
     // x is now equal to 5 
} 

var x = 4; 
alert(x); // x is equal to 4 
myfunction(x); 
alert(x); // x is still equal to 4 

傳遞對象:

function myobject() 
{ 
    this.value = 5; 
} 
var o = new myobject(); 
alert(o.value); // o.value = 5 
function objectchanger(fnc) 
{ 
    fnc.value = 6; 
} 
objectchanger(o); 
alert(o.value); // o.value is now equal to 6 

來源:http://snook.ca/archives/javascript/javascript_pass

+1

具體區別在於第一個例子中的'x = 5'行放棄了'x'的原始參數值並用'5'代替。在第二個例子中,'fnc'變量不會以這種方式被替換,所以傳入的原始對象將被更新。 – Gareth 2012-02-24 16:55:49

0

如果將一個對象傳遞給一個函數,它總是被視爲傳遞一個對它的引用。 要對原始值類似的效果,你可以將它們包裝在一個對象之前一樣

var intVal = { val: 0 }; 

這樣,你可以把它傳遞給函數,仍可以修改實際的變量。