- 什麼是數據?
- 存儲在內存中代表特定信息的'東東', 本質上是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引擎如何管理內存?- 內存生命週期
- 分配小內存空間, 得到它的使用權
- 存儲數據, 可以反覆進行操作
- 不需要時將其釋放/歸還
- 釋放內存
- 爲執行函數分配的棧空間內存: 函數執行完 自動釋放
- 存儲對象的堆空間內存: 成爲垃圾對象==> 垃圾回收器回收