簡體   English   中英

通過引用傳遞 vs 引用副本

[英]Pass by reference vs Copy of reference

我已經理解了pass by reference的概念。
然而, copy of reference的概念copy of reference讓我有點困惑。

這兩個通過引用傳遞與引用副本之間有什么區別嗎?

var user={
   name:"xxx"
}

function update(ref) {
  ref = {
     dep:"yyy"
  };
}

update(user);

使用上述代碼時,為什么不重新初始化user對象?

當我按如下方式更新現有屬性時:

ref.name='modified'

它更新user對象。

另外,如果我問,重構的代碼是否傳遞了引用副本

如果變量ref是對某個對象obj的引用,則ref的值就是obj的內存地址。 制作ref的副本,我們稱之為ref2 ,只會創建另一個具有相同內存地址的變量。 因此,傳遞引用或引用的副本是一回事。

不一樣的是按傳遞和按引用傳遞。 這兩者之間的區別在網上有詳細記錄。

它與是否通過引用傳遞變量無關。

事實上,問題是你在ref放置了另一個對象,它不再指向存儲在user變量中的同一個對象。

function update(ref) {

  //In this line we are reinitializing the value of ref with another object
  ref = {
    dep: "yyy"
  };
  ref.name = 'modified';
}

演示:

讓我們看看這個片段的不同之處:

 var user = { name: "xxx" } function update(ref) { //Here we are updating ref/user ref.before = "a value"; //And in this line we are reinitializing the value of ref with another object ref = { dep: "yyy" }; ref.name = 'modified'; console.log('This is ref value: '); console.log(ref); } update(user); console.log('This is user value: '); console.log(user);

JS 函數中的參數:

關於參數如何傳遞給函數(按引用或按值)的問題,原語和對象之間存在差異,您可以閱讀MDN 函數文檔,其中說:

原始參數(例如數字)按值傳遞給函數 值被傳遞給函數,但如果函數改變了參數的值,這種改變不會在全局或調用函數中反映出來。

如果您傳遞一個對象(即非原始值,例如 Array 或用戶定義的對象)作為參數,並且函數更改了對象的屬性,則該更改在函數外部可見

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM