JS 堆疊

weixin_33872660發表於2018-09-06

堆是堆記憶體的簡稱,棧是棧記憶體的簡稱。

堆是動態分配記憶體,記憶體大小不一,也不會自動釋放。棧是自動分配相對固定大小的記憶體空間,並由系統自動釋放.

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是在棧記憶體中獨立存在,所以會產生上述結果。熟悉此原理,則資料的深淺拷貝就不難理解了!

相關文章