P粉4269063692023-08-22 13:30:26
在JavaScript中很有趣。考慮以下範例:
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);
這將產生以下輸出:
10 changed unchanged
obj1
根本不是引用,那麼改變obj1.item
對函數外部的obj1
沒有影響。 num
將為100
,obj2.item
將為"changed"
。相反,num
保持為10
,obj2.item
仍然為"unchanged
"。 實際上,情況是傳遞的項目是按值傳遞的。但是按值傳遞的項目本身就是一個引用。 從技術上講,這被稱為共享呼叫。
在實際應用中,這表示如果更改參數本身(如num
和obj2
),那不會影響傳入參數的項目。但是,如果更改參數的內部,那將會傳播回來(如obj1
)。