2012-08-11 20 views

回答

1

對象和數組作爲參考,並且改變傳遞給函數會影響原來的參數傳遞。所有其他類型的行爲就像它們按值傳遞一樣,並且不能更改原始內容。

Javascript會自動執行此操作 - 您無法指定按某些其他語言通過值或引用傳遞某些內容。如果你想通過引用傳遞一些東西,把它放在一個數組或對象中,並傳遞數組/對象。

實施例1(傳遞對象):

​​

實施例2(傳遞字符串):

function hello(str) { 
    str = str + " and goodbye"; 
    alert(str); 
} 

var greeting = "Hello"; 
hello(greeting); 
// greeting == "Hello" - value is unchanged 

實施例3(通過在對象的字符串):

function hello(obj) { 
    obj.str = obj.str + " and goodbye"; 
    alert(obj.str); 
} 

var o = {greeting: "Hello"}; 
hello(o); 
// o.greeting == "Hello and goodbye" - value is changed 

實例4(通過一個數字):

function hello(num) { 
    num++; 
    alert(num); 
} 

var mynum = 5; 
hello(mynum); 
// mynum == 5 - value is unchanged 

注意:有時令人困惑的一件事是字符串實際上是通過引用傳遞的(而不是製作副本),但是javascript中的字符串是不可變的(您無法在javascript中更改字符串),所以如果嘗試要修改作爲參數傳遞的字符串,更改後的值將以新字符串結尾,因此原始字符串不會更改。

0

我想你的意思是問:「是否有可能將參數值傳遞給引用的參數?

JavaScript本質上是一種通過參照語言傳遞對象的方式。像數字,布爾值和字符串這樣的原語按值傳遞。如果你想到如何PhP(或幾個其他人)可以改變通過引用或值修飾符(IE函數passByRef(& refVar))這個是不可能的與JavaScript。這裏有一個很好的帖子,關於有時javascript可能會在傳遞某些對象和你可能期望的東西時變得更加無所謂,而如果它有幫助,實際上會發生什麼。

Is JavaScript a pass-by-reference or pass-by-value language?