數據,變量, 內存的理解
- 什麼是數據?
- 在內存中可讀的, 可傳遞的保存了特定信息的’東東’
- 一切皆數據, 函數也是數據
- 在內存中的所有操作的目標: 數據
- 數據的特點: 可傳遞, 可運算
- 什麼是變量?
- 在程序運行過程中它的值是允許改變的量
- 一個變量對應一塊小內存, 它的值保存在此內存中
- 什麼是內存?
- 內存條通電後產生的存儲空間(臨時的)
- 一塊內存包含2個方面的數據
- 內存空間的分類
- 內存,數據, 變量三者之間的關係
- 內存是容器, 用來存儲不同數據
- 變量是內存的標識, 通過變量我們可以操作(讀/寫)內存中的數據
內存中存的是什麼?
var a = xxx, a內存中到底保存的是什麼?
var a = 3
a = function () {
}
var b = 'abc'
a = b
b = {}
a = b
- xxx是基本數據, 保存的就是這個數據
- xxx是對象, 保存的是對象的地址值
- xxx是一個變量, 保存的xxx的內存內容(可能是基本數據, 也可能是地址值)
關於引用變量賦值問題
- 2個引用變量指向同一個對象, 通過一個變量修改對象內部數據, 另一個變量看到的是修改之後的數據
var obj1 = {name: 'Tom'}
console.log(obj1.name)
var obj2 = obj1
obj2.name = 'Jachie'
console.log(obj1.name)
function fn (obj) {
obj.name = 'Jack'
}
fn(obj1)
console.log(obj2.name)
- 2個引用變量指向同一個對象, 讓其中一個引用變量指向另一個對象, 另一引用變量依然指向前一個對象
var a = {age: 12}
var b = a
a = {name: 'BOB', age: 13}
b.age = 14
console.log(b.age, a.name, a.age)
在js調用函數時傳遞變量參數時, 是值傳遞還是引用傳遞
- 理解1: 都是值(基本/地址值)傳遞
- 理解2: 可能是值傳遞, 也可能是引用傳遞(地址值)
var a = 3
function fn (a) {
a = a +1
}
fn(a)
console.log(a)
function fn2 (obj) {
console.log(obj.name)
}
var obj = {name: 'Tom'}
fn2(obj)
JS引擎如何管理內存?
- 內存生命週期
- 分配小內存空間, 得到它的使用權
- 存儲數據, 可以反覆進行操作
- 釋放小內存空間
- 釋放內存
- 局部變量: 函數執行完自動釋放
- 對象: 成爲垃圾對象==>垃圾回收器回收