2、資料、記憶體和變數
阿新 • • 發佈:2020-08-08
- 什麼是資料?
- 儲存在記憶體中代表特定資訊的'東東', 本質上是0101...
- 資料的特點: 可傳遞, 可運算
- 一切皆資料, 函式也是資料
- 記憶體中所有操作的目標: 資料
- 算術運算
- 邏輯運算
- 賦值
- 執行函式
- 什麼是記憶體?
- 記憶體條通電後產生的可儲存資料的空間(臨時的)
- 記憶體產生和死亡: 記憶體條(電路版)>通電>產生記憶體空間>儲存資料>處理資料>斷電>記憶體空間和資料都消失
- 一塊小記憶體的2個數據
- 內部儲存的資料(一般資料/地址資料)
- 地址值資料
- 記憶體空間的分類
- 棧: 全域性變數/區域性變數
- 堆: 物件(空間較大)
- 什麼是變數?
-
在程式執行過程中值是允許改變的量, 由變數名和變數值組成
-
每個變數都對應的一塊小記憶體, 變數名用來查詢對應的記憶體, 變數值就是記憶體中儲存的資料
-
資料, 記憶體和變數三者之間的關係
- 記憶體是容器, 用來儲存不同資料
- 變數是記憶體的標識, 通過變數我們可以操作(讀/寫)記憶體中的資料
- 相關問題
- 關於賦值和記憶體的問題
問題: var a = xxx, a記憶體中到底儲存的是什麼?- xxx是基本資料, 儲存的就是這個資料
- xxx是物件, 儲存的是物件的地址值
- xxx是一個變數, 儲存的xxx的記憶體內容(可能是基本資料, 也可能是地址值)
- 關於引用變數賦值問題
- 2個引用變數指向同一個物件, 通過一個變數修改物件內部資料, 另一個變數看到的是修改之後的資料
var obj1 = {name: 'Tom'} function fn (obj) { obj.name = 'A' //操作物件 } fn(obj1) console.log(obj2.name) //A
- 2個引用變數指向同一個物件, 讓其中一個引用變數指向另一個物件, 另一引用變數依然指向前一個物件
a = {name: 'BOB', age: 13} function fn2 (obj) { obj = {age: 15} //重新賦值 } fn2(a) console.log(a.age) // 13
- 關於資料傳遞問題
問題: 在呼叫函式時傳遞變數引數時, 是值傳遞還是引用傳遞?- 理解1: 都是值(基本/地址值)傳遞
- 理解2: 可能是值傳遞, 也可能是引用傳遞(地址值)
- 記憶體管理
問題: JS引擎如何管理記憶體?- 記憶體生命週期
- 分配小記憶體空間, 得到它的使用權
- 儲存資料, 可以反覆進行操作
- 不需要時將其釋放/歸還
- 釋放記憶體
- 為執行函式分配的棧空間記憶體: 函式執行完 自動釋放
- 儲存物件的堆空間記憶體: 成為垃圾物件==> 垃圾回收器回收