function changeStuff(a, b, c)
{
a = a * 10;
b.item = "changed";
c = {item: "changed"};
}
var num = 10;
var obj1 = {item: "unchanged"};
var obj2 = {item: "unchanged"};
changeStuff(num, obj1, obj2);
console.log(num);
console.log(obj1.item);
console.log(obj2.item);
在JavaScript中很有趣。考慮以下範例:
這將產生以下輸出:
obj1
根本不是引用,那麼改變obj1.item
對函數外部的obj1
沒有影響。num
將為100
,obj2.item
將為"changed"
。相反,num
保持為10
,obj2.item
仍然為"unchanged
"。實際上,情況是傳遞的項目是按值傳遞的。但是按值傳遞的項目本身就是一個引用。 從技術上講,這被稱為共享呼叫。
在實際應用中,這表示如果更改參數本身(如
num
和obj2
),那不會影響傳入參數的項目。但是,如果更改參數的內部,那將會傳播回來(如obj1
)。