1.棧與堆
可以粗淺的認為JavaScript的所有數(shù)據(jù)都保存在堆內存中。
但仍然需要基于堆棧數(shù)據(jù)結構的思路進行處理,比如JavaScript的執(zhí)行上下文(會創(chuàng)建一個叫做變量對象的特殊對象)在邏輯上實現(xiàn)了堆棧。
棧(堆棧)空間: 最后被放進去,但可以最先被使用。即先進后出,后進先出。
堆空間: 無序的數(shù)據(jù)存儲方式,只要知道名字就可以找到數(shù)據(jù)。
2.變量對象與基礎數(shù)據(jù)類型
基礎數(shù)據(jù)類型往往都會保存在變量對象中。
變量對象特殊,雖然也存放在堆內存中,理解時需要將其于堆內存區(qū)分開來。
基礎數(shù)據(jù)類型可以直接訪問和操作保存在變量中實際的值。
5種基礎數(shù)據(jù)類型: Undefined、Null、Boolean、Number、String。
3.引用數(shù)據(jù)類型與堆內存
引用數(shù)據(jù)類型的值是保存在堆內存中的對象。
不能直接訪問和操作對象的堆內存空間。
操作對象實際上是在操作對象的引用。
引用可以理解為保存在變量對象中的一個與堆內存的實際值相關聯(lián)的地址。
4.內存空間管理
自動垃圾收集機制使內存被自動管理。
自動垃圾收集機制的原理就是找出那些不再繼續(xù)使用的值,然后釋放其占用的內存。垃圾收集器會每隔固定的時間段就執(zhí)行一次釋放操作。
內存生命周期: 1. 分配所需內存;2. 使用所分配內存(讀、寫);3. 不需要時將其釋放、歸還。
垃圾收集器很容易判斷并回收局部變量。但是全局變量需要自動釋放內存空間的時間則很難判斷,因此為確保性能問題需要盡量避免使用全局變量。