1. 程式人生 > >02_javascript資料, 變數與記憶體

02_javascript資料, 變數與記憶體

什麼是資料?

儲存於記憶體中代表特定資訊的'東東', 本質就是0101二進位制
具有可讀和可傳遞的基本特性
萬物(一切)皆資料, 函式也是資料
程式中所有操作的目標: 資料
    算術運算
    邏輯運算
    賦值
    呼叫函式傳參
    ...

什麼是記憶體?

記憶體條通電後產生的儲存空間(臨時的)
產生和死亡: 
	記憶體條(整合電路板)==>通電==>產生一定容量的儲存空間
	==>儲存各種資料==>斷電==>記憶體全部消失
記憶體的空間是臨時的, 而硬碟的空間是持久的
分配記憶體: 宣告變數和函式或建立物件時,
          JS引擎會自動為此分配一定大小的記憶體來存放對應的資料
釋放記憶體: 清空記憶體中的資料,
          標識記憶體可以再分配使用(記憶體不釋放就不能複用)
自動釋放: 棧空間的區域性變數
垃圾回撥器回撥: 堆空間的垃圾物件
一塊記憶體包含2個數據
    * 內部儲存的資料(一般資料/地址資料)
    * 記憶體地址值資料
記憶體分類
    * 棧: 全域性變數, 區域性變數 (空間較小)
    * 堆: 物件 (空間較大)

什麼是變數?

值可以變化的量, 由變數名與變數值組成

一個變數對應一塊小記憶體, 變數名用來查詢到記憶體,
變數值就是記憶體中儲存的內容

記憶體,資料, 變數三者之間的關係

記憶體是一個容器,用來儲存程式執行需要操作的資料

變數是記憶體的標識, 我們通過變數找到對應的記憶體,
進而操作(讀/寫)記憶體中的資料

相關問題

關於賦值與記憶體的問題?
問題1: var a = xxx, a記憶體中到底儲存的是什麼?
	xxx是一個基本資料
	xxx是一個物件
	xxx是一個變數
關於引用變數賦值問題?
2個引用變數指向同一個物件,
通過一個引用變數修改物件內部資料, 
另一個引用變數也看得見

2個引用變數指向同一個物件,
讓一個引用變數指向另一個物件, 
另一個引用變數還是指向原來的物件
關於資料傳遞問題
只有值傳遞, 沒有引用傳遞, 傳遞的都是變數的值,
只是這個值可能是基本資料, 也可能是地址(引用)資料
如果後一種看成是引用傳遞, 那就值傳遞和引用傳遞都可以有
JS引擎如何管理記憶體?
記憶體生命週期
    1). 分配需要的記憶體
    2). 使用分配到的記憶體
    3). 不需要時將其釋放/歸還
釋放記憶體
    1). 為執行函式分配的棧空間記憶體: 函式執行完自動釋放
    2). 儲存物件的堆空間記憶體: 當記憶體沒有引用指向時, 
        物件成為垃圾物件, 垃圾回收器後面就會回收釋放此記憶體