一隻菜鳥攻城獅啊
今天,我們來玩一下深拷貝和淺拷貝吧。可以吧,別給我面子,隨便玩,啥姿勢都行。
說深淺拷貝之前,我們先來談一談JS的儲存,JS變數儲存有棧儲存和堆儲存,基本資料型別存放在棧中,而複雜資料型別存放在堆中,複雜資料型別的引用資料型別的地址儲存在棧中
來看看上面這張圖,應該還是比較清晰的,可能有的朋友會問,不是要要說深淺拷貝嗎?怎麼扯到變數儲存了,別急嘛,做正事前不得有個前戲啥的才舒服嘛,對吧
來,我們趕緊開始做正事
先來說一下深拷貝:當一個物件拷貝另一個物件,其中一個物件的資料發生改變不會影響另一個物件的資料,因為拷貝的是原來物件的資料。
淺拷貝:當一個物件拷貝另一個物件的時候,只要其中一個物件發生改變那另一個物件也發生改變,因為淺拷貝拷貝的是物件的地址。
大家可以結合著上面的資料儲存來理解一下子
再給大家舉一個大栗子
假設你現在電腦中有一個資料夾,你把它複製了,那你改變其中一個資料夾裡的資料另一個資料夾的內容會不會變,這個就是深拷貝
那現在我們給檔案建立兩個快捷方式,你通過其中一個快捷方式進入資料夾修改了資料,那用另一個快捷方式進入資料夾時資料夾的內容是否被改變了,這就是淺拷貝
薛微等一會啊,我去給你們做個小黃圖
我做好了,準備發車
資料夾2是由資料夾一複製過去的(相當於深拷貝)
由於資料夾2是由資料夾1複製過去的,改變資料夾2的內容不會影響資料夾1,改變資料夾1的內容也不會影響資料夾2,那這個就是深拷貝的一個原理
下面我們再來看看淺拷貝,我放一個圖你就懂了
兩個快捷方式都指向資料夾1,當我開啟其中一個快捷方式並且修改裡面的內容時,再開啟另一個快捷方式,他裡面的內容也會改變,這就是淺拷貝的一個原理
原理大體就是這個樣子,實際上還是挺簡單的,大家理解一下吧,我去欣賞會百度雲的學習資料好吧,百度雲裡還由好多老師等著教我知識呢