搜尋

首頁  >  問答  >  主體

JavaScript 是一種按引用傳遞還是按值傳遞的語言?

<p>原始類型(數字、字串等)是按值傳遞的,但物件是未知的,因為它們都可以是按值傳遞的(在這種情況下,我們認為保存物件的變數實際上是一個對物件的引用)和按引用傳遞(當我們認為物件的變數保存物件本身時)。 </p> <p>雖然最後並不重要,但我想知道呈現參數傳遞約定的正確方法是什麼。 JavaScript 規範是否有摘錄,它定義了與此相關的語意? </p>
P粉450744515P粉450744515466 天前530

全部回覆(1)我來回復

  • P粉231112437

    P粉2311124372023-08-24 14:43:30

    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 保持 10obj2.item 保持「不變」。

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

    實際上,這表示如果您變更參數本身(如 numobj2),則不會影響輸入到範圍。但是,如果您更改參數的內部,它將向上傳播(與 obj1 一樣)。

    回覆
    0
  • 取消回覆