JavaScript 很有趣??紤]這個(gè)例子:
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);
這會(huì)產(chǎn)生輸出:
10 changed unchanged
obj1
根本不是引用,則更改 obj1.item
不會(huì)對(duì)函數(shù)外部的 obj1
產(chǎn)生任何影響。 num
將是 100
,而 obj2.item
將讀取“changed”
。相反,num
保持 10
且 obj2.item
保持“不變
”。相反,情況是傳入的項(xiàng)是按值傳遞的。但是按值傳遞的項(xiàng)本身就是一個(gè)引用。 從技術(shù)上講,這稱為共享呼叫。
實(shí)際上,這意味著如果您更改參數(shù)本身(如 num
和 obj2
),則不會(huì)影響輸入到范圍。但是,如果您更改參數(shù)的內(nèi)部,它將向上傳播(與 obj1
一樣)。