1. 程式人生 > >js的變量——基本類型保存在棧中,引用類型保存在堆中

js的變量——基本類型保存在棧中,引用類型保存在堆中

不能 分享圖片 腳本 -s 先進後出 多個 mage 基本 num

javascript的基本類型:Undefined,Null,Boolean,Number,String

引用類型:Object,Array,Function

基本類型值在內存中占據固定大小,被保存在棧內存中,引用類型值是對象,保存在堆內存中。

Javascript的內存的生命周期對於用戶來說是透明的,不開放的。在定義變量時候就完成了分配內存,使用時候是對內存的讀寫操作,內存的釋放依賴於瀏覽器的垃圾回收機制。

棧(stack)和堆(heap)==>

1,棧

stack是有結構的,先進後出,存放基本類型和對象的引用,每個區塊的大小是明確的。

技術分享圖片

2,堆

heap沒有結構,數據任意存放,js中主要存放的是引用類型,比如:Array,Object對象

技術分享圖片

所以明顯看出:數據查詢速度比較的話,stack遠遠大於heap。

在實際開發過程中,偶爾遇到棧溢出的情況,stack overflow錯誤,因為stack創建時候,大小是確定的,超過額度大小就會發生棧溢出【當js出現死循環或者錯誤的遞歸時候】。heap大小是不確定的,需要可以一直累加。

js是單線程的,核心特征哈,那麽怎麽利用多核的CPU呢?H5的Web Worker標準,允許js腳本創建多個線程,但是子線程受主線程的控制,且不能操作DOM。

stack是線程獨占的,heap是線程共有的。

【完】

js的變量——基本類型保存在棧中,引用類型保存在堆中