let person = { name : 'Linda'};
let members = person;
person = null
console.log(members)。
輸出結果是 {name: 'Linda'} 但我學到的關于參考型別的知識是,成員和人有相同的記憶體地址
uj5u.com熱心網友回復:...但我學到的關于參考型別的知識是,成員和人有相同的記憶體地址...
某種程度上。它們都包含對同一個物件的參考,而這個物件在記憶體的其他地方(不是字面上的變數內部)。(不管是字面上的記憶體地址還是其他什么,都是你不需要關心的實作細節,而且不同的 JavaScript 引擎可能有所不同。
當你執行 讓我們一步一步來: 為了處理這個問題,JavaScript引擎在記憶體中創建一個物件。該物件將有某種方式來參考它,稱為物件參考。對于我們的目的,讓我們說它是 然后JavaScript引擎將該參考存盤在變數 然后我們做: 這只是把 然后我們做: 這只是把 這根本沒有改變其他任何東西。所以 顯示物件。 如果你做了 uj5u.com熱心網友回復: 當你把person分配給members時,member將存盤此刻person的地址。然后你把person分配給null,這樣person就會指向另一個地址,但不會改變現有地址的值。所以成員仍然保留舊的地址和它的值person = null時,你所做的只是將該參考從person變數中清除。這樣做對members或它所參考的物件沒有任何影響。
let person = { name : 'Linda'/span>};
Ref1234(這個名字沒有任何潛在的意義,我只是隨機挑選了它,所以我們有一個名字可以使用):
---------------
Ref1234---------------->|(物件)|
---------------
|名稱:"Linda" |
---------------
person中: ---------------
Ref1234----------- ---->|(物件)|
| ---------------
| name: "Linda" |
| ---------------
人。 Ref1234 -
let members = person;
person中的參考也復制到members中: ---------------
Ref1234----------- - ->|(物件)|
| | ---------------
| | name: "Linda" |
| | ---------------
人。 Ref1234 - | |
|
成員。Ref1234 ---
person = null。
null放入person: ---------------
Ref1234------------- -->|(物件)|
| ---------------
| 名稱: "Linda" |
| ---------------
person: null | |
|
成員。Ref1234 ---
console.log(members)
members = null;或者members變數超出了范圍,沒有封閉保留它,等等,如果它是唯一剩下的包含Ref1234的東西,那么這個物件可能被JavaScript引擎收集到垃圾。但是當你執行person = null;時,這種情況就不會發生,因為其他東西(members)有一個參考的副本。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/312767.html
標籤:
上一篇:如何正確改變UWP的風格?
