首頁  >  問答  >  主體

JavaScript的參數傳遞方式是按值還是按引用?

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

全部回覆(1)我來回復

  • P粉426906369

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

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

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

    回覆
    0
  • 取消回覆