JavaScript 變量類型 保存內存中的位置 和 引用


1. JavaScript變量

  基本類型值在內存中占據固定大小的空間 因此被保存在棧內存中。

  從一個變量向另一個變量復制基本來下的值 會創建這個值得一個副本。

  引用類型的值是對象 保存在堆內存中。

  包含引用類型值得變量實際上包含的並不是對象本身 而是一個指向該對象的指針。

  從一個變量向另一個變量復制引用類型的值 復制的其實是指針 因此兩個變量最終都指向同一個對象

2. 堆和棧

  堆棧在數據結構里面的含義就是一組數據的存放方式 后進先出 

  push: 在最頂層加入數據

  pop: 返回並移除最頂層的數據

  top:  返回最頂層數據的值 但不移除

  isempty: 返回一個布爾值 表示當前stack是否為空棧

  Stack 是一種存放數據的內存區域。系統會划分出兩張不同的內存空間 stack(棧) 和堆(heap)

  stack (棧)是有結構的(就像后進先出 從下到上) 每一個區域都按照一定次序存放,可以明確知道每個區塊的大小。 heap是沒有結構 數據可以任意存放。因此stack的尋址速度要快於heap。

  一般來說 每個線程分配一個stack(棧) 每個進程分配一個heap。就是說 stack獨占線程,heap是共享線程。

  所以 數據存放的規則是 只要是局部的 占用空間確定的數據 一般都存放在stack里面。否則就放在heap里面局部變量一旦運行結束 就會GC回收 而heap的那個對象實例直到系統的GC將這里的內存回收。因此一般內存泄漏都方生在heap

  使用棧就象我們去飯館里吃飯,只管點菜(發出申請)、付錢、和吃(使用),吃飽了就走,不必理會切菜、洗菜等准備工作和洗碗、刷鍋等掃尾工作,這些洗碗 后續工作好像就是垃圾回收 不用我們自己動手。他的好處是快捷,但是自由度小。

 

使用堆就象是自己動手做喜歡吃的菜餚,比較麻煩,但是比較符合自己的口味,但是要我們自己動手去收拾這些 東西 洗碗等等 而且自由度大

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM