JS 堆疊
堆是堆記憶體的簡稱,棧是棧記憶體的簡稱。
堆是動態分配記憶體,記憶體大小不一,也不會自動釋放。棧是自動分配相對固定大小的記憶體空間,並由系統自動釋放.
JS的資料型別
- 基本資料型別
Undefined、Null、Boolean、String、Number、Symbol都是直接按值直接存在棧中,每種型別的資料佔用的記憶體空間大小都是固定的,並且由系統自動分配自動釋放 - 引用資料型別
Object,Array,Function這樣的資料存在堆記憶體中,但是資料指標是存放在棧記憶體中的,當我們訪問引用資料時,先從棧記憶體中獲取指標,通過指標在堆記憶體中找到資料
以程式碼為例:
let arr_origin = [1,2,3,4,5];
let arr_copy = arr_origin;
let arr2 = arr_origin[2];
如果執行下面程式碼:
arr_copy[1] = 'change1';
arr2 = ‘change2’
我們發現arr_origin中的下標是1的值變成可change1,但是下標是2的值並未變化。原因是:arr_copy是arr_origin棧指標的引用,並未開闢新的記憶體空間,但是arr2是在棧記憶體中獨立存在,所以會產生上述結果。熟悉此原理,則資料的深淺拷貝就不難理解了!
相關文章
- (js佇列,堆疊) (FIFO,LIFO)JS佇列
- JS 資料型別和堆疊JS資料型別
- JS中堆疊記憶體的練習JS記憶體
- 平衡堆疊
- 堆疊圖
- 如何優雅地檢視 JS 錯誤堆疊?JS
- C#堆疊(Stack)C#
- [golang]如何看懂呼叫堆疊Golang
- 益智補劑:Stamets堆疊
- Thrift的網路堆疊
- bzoj2253 紙箱堆疊
- 什麼是網路堆疊?
- junkman 遠端堆疊監控
- iOS crash 日誌堆疊解析iOS
- StackOverflowError堆疊溢位錯誤Error
- 華為裝置堆疊原理
- Python實現堆疊與佇列Python佇列
- 【matplotlib 實戰】--堆疊面積圖
- QT分局管理:堆疊窗體(三)QT
- CSS之定位和堆疊屬性CSS
- echarts 堆疊面積階梯圖Echarts
- SQL隱碼攻擊-堆疊注入SQL
- Java堆疊的區別有哪些Java
- 資料結構的概念、堆疊資料結構
- golang: 返回錯誤時列印堆疊Golang
- Java之String和StringBuffer堆疊圖分析Java
- C中關於堆疊的總結
- 不一樣的 Android 堆疊抓取方案Android
- information_schema.innodb_trx 查詢堆疊ORM
- android 解碼混淆過的堆疊資訊Android
- 堆疊溢位報錯引發的思考
- 堆疊的實現(1)--靜態陣列陣列
- windows核心程式設計--記憶體堆疊Windows程式設計記憶體
- 三探堆疊欺騙之Custom Call Stacks
- thinkphp console 命令列列印錯誤呼叫堆疊PHP命令列
- 初探堆疊欺騙之靜態欺騙
- 如何利用執行緒堆疊定位問題執行緒
- javascript堆疊記憶體分配的區別JavaScript記憶體