日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 前端技术 > javascript >内容正文

javascript

搞懂深浅拷贝JavaScript内存之栈和堆

發布時間:2025/3/20 javascript 19 豆豆
生活随笔 收集整理的這篇文章主要介紹了 搞懂深浅拷贝JavaScript内存之栈和堆 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

對于前端來說,平時開發業務代碼的時候根本不會關心JavaScript的內存問題,因為根本用不到,也因此對于內存分配沒有一點概念。只有理解了內存分配,對于深拷貝和淺拷貝才能真正理解。當然,理解內存分配對JavaScript才會有更深層次的理解。

基本所有程序都有內存的概念,我們只要簡單理解JavaScript是怎么分配內存的就夠了。JavaScript內存可以理解就分為兩塊,一個是棧,一個是堆。棧是有序的,拿兵乓球盒子來記憶確實很生動,先進后出。但是我不清楚真正取數據的時候程序是怎么執行的。堆是無序的,里面存放的數據通過指針獲取。棧的存取速度大于堆。

我們都知道JavaScript有五個基礎數據類型,Undefined、Null、Boolean、Number、String,在JavaScript內存分配中,基礎數據類型存放在棧中,引用數據類型Object,也就是Array、Data等存放在堆中,但是棧存儲著指向堆的指針地址。

比如:

var a = 1; var b = 2; var c = 3; var d = [1]; var e = {e: 1};

在內存中大概是這樣的:

d和c都只是存儲一個地址,數據存儲在堆中,這個地址指向堆,至于這個地址是什么,我就不知道了,這邊我只是參考網上的格式。a、b、c基礎數據類型則是直接存儲在棧中。

知道了這個,我們就很容易理解

var a = {a: 15, b: 20}; var b = a; b.a = 30; alert(a.a);

為什么彈出來的是30了。如下圖:

因為a和b都是對象,把a賦值給b的時候,只是把地址賦值給了b,指向的是堆內相同的數據,所以在改變b的數據的時候,堆內數據改變了,但是a和b地址指針相同,所以彈出來的也是30。

知道了基礎數據類型和引用數據類型在棧和堆內的存儲,深拷貝和淺拷貝是不是就變的很簡單,跟知道了GC機制之后理解閉包就容易很多一樣。想要真的學習JavaScript這門語言,很多基礎知識真的很重要。

歡迎關注Coding個人筆記公眾號

轉載于:https://juejin.im/post/5c4ed2246fb9a04a04416a03

總結

以上是生活随笔為你收集整理的搞懂深浅拷贝JavaScript内存之栈和堆的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。