JavaScript的參數傳遞方式是按值還是按引用?
P粉394812277
P粉394812277 2023-08-21 15:57:16
0
1
570
<p>原始類型(數字、字串等)是按值傳遞的,但對像是未知的,因為它們既可以按值傳遞(在這種情況下,我們認為持有對象的變數實際上是對象的引用),也可以按引用傳遞(在這種情況下,我們認為變數持有物件本身)。 </p> <p>雖然最終不重要,但我想知道如何正確地呈現參數傳遞約定。是否有JavaScript規範的摘錄,定義了關於這個的語意應該是什麼? </p>
P粉394812277
P粉394812277

全部回覆(1)
P粉426906369

在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將為100obj2.item將為"changed"。相反,num保持為10obj2.item仍然為"unchanged"。

實際上,情況是傳遞的項目是按值傳遞的。但是按值傳遞的項目本身就是一個引用。 從技術上講,這被稱為共享呼叫

在實際應用中,這表示如果更改參數本身(如numobj2),那不會影響傳入參數的項目。但是,如果更改參數的內部,那將會傳播回來(如obj1)。

熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板