02_javascript資料, 變數與記憶體
阿新 • • 發佈:2018-12-14
什麼是資料?
儲存於記憶體中代表特定資訊的'東東', 本質就是0101二進位制
具有可讀和可傳遞的基本特性
萬物(一切)皆資料, 函式也是資料
程式中所有操作的目標: 資料
算術運算
邏輯運算
賦值
呼叫函式傳參
...
什麼是記憶體?
記憶體條通電後產生的儲存空間(臨時的) 產生和死亡: 記憶體條(整合電路板)==>通電==>產生一定容量的儲存空間 ==>儲存各種資料==>斷電==>記憶體全部消失 記憶體的空間是臨時的, 而硬碟的空間是持久的 分配記憶體: 宣告變數和函式或建立物件時, JS引擎會自動為此分配一定大小的記憶體來存放對應的資料 釋放記憶體: 清空記憶體中的資料, 標識記憶體可以再分配使用(記憶體不釋放就不能複用) 自動釋放: 棧空間的區域性變數 垃圾回撥器回撥: 堆空間的垃圾物件 一塊記憶體包含2個數據 * 內部儲存的資料(一般資料/地址資料) * 記憶體地址值資料 記憶體分類 * 棧: 全域性變數, 區域性變數 (空間較小) * 堆: 物件 (空間較大)
什麼是變數?
值可以變化的量, 由變數名與變數值組成
一個變數對應一塊小記憶體, 變數名用來查詢到記憶體,
變數值就是記憶體中儲存的內容
記憶體,資料, 變數三者之間的關係
記憶體是一個容器,用來儲存程式執行需要操作的資料
變數是記憶體的標識, 我們通過變數找到對應的記憶體,
進而操作(讀/寫)記憶體中的資料
相關問題
關於賦值與記憶體的問題?
問題1: var a = xxx, a記憶體中到底儲存的是什麼?
xxx是一個基本資料
xxx是一個物件
xxx是一個變數
關於引用變數賦值問題?
2個引用變數指向同一個物件, 通過一個引用變數修改物件內部資料, 另一個引用變數也看得見 2個引用變數指向同一個物件, 讓一個引用變數指向另一個物件, 另一個引用變數還是指向原來的物件
關於資料傳遞問題
只有值傳遞, 沒有引用傳遞, 傳遞的都是變數的值,
只是這個值可能是基本資料, 也可能是地址(引用)資料
如果後一種看成是引用傳遞, 那就值傳遞和引用傳遞都可以有
JS引擎如何管理記憶體?
記憶體生命週期
1). 分配需要的記憶體
2). 使用分配到的記憶體
3). 不需要時將其釋放/歸還
釋放記憶體
1). 為執行函式分配的棧空間記憶體: 函式執行完自動釋放
2). 儲存物件的堆空間記憶體: 當記憶體沒有引用指向時,
物件成為垃圾物件, 垃圾回收器後面就會回收釋放此記憶體