js的堆和棧

參考文章:html

淺析JS中的堆內存與棧內存java

定義

在js引擎中對變量的存儲主要有兩種位置,堆內存和棧內存。指針

和java中對內存的處理相似,棧內存主要用於存儲各類基本類型的變量,包括Boolean、Number、String、Undefined、Null,**以及對象變量的指針,這時候棧內存給人的感受就像一個線性排列的空間,每一個小單元大小基本相等。cdn

而堆內存主要負責像對象Object這種變量類型的存儲htm

棧內存中的變量通常都是已知大小或者有範圍上限的,算做一種簡單存儲。對象

而堆內存存儲的對象類型數據對於大小這方面,通常都是未知的。我的認爲,這也是爲何null做爲一個object類型的變量卻存儲在棧內存中的緣由blog

所以當咱們定義一個const對象的時候,咱們說的常量實際上是指針,就是const對象對應的堆內存指向是不變的,可是堆內存中的數據自己的大小或者屬性是可變的。而對於const定義的基礎變量而言,這個值就至關於const對象的指針,是不可變內存

咱們常說的值類型和引用類型其實說的就是棧內存變量和堆內存變量,再想一想值傳遞和引用傳遞、深拷貝和淺拷貝,都是圍繞堆棧內存展開的,一個是處理值,一個是處理指針get

相關文章
相關標籤/搜索