JavaScript變數,資料和記憶體的相關問題

翟同學發表於2020-09-25

變數,資料和記憶體

資料:儲存在記憶體裡面的010101

記憶體:通電後產生可儲存資料的空間,斷電後資料消失,記憶體中有兩塊資料,一塊是資料,一塊是地址

變數:由變數名和變數值組成,每個變數都對應一小塊記憶體,變數名用來查詢記憶體,變數值為該記憶體中儲存的資料

相關問題

關於賦值與記憶體

賦值無非就兩種

賦值的是值

var a = 1;
var b = a;
//b賦值的是1

賦值的是地址

var a = {};
var b = a;
//b賦值的是a的地址

關於引用變數賦值的問題

當兩個引用變數指向同一物件通過一個變數修改物件內部資料,另一個變數看到的是修改之後的資料

var obj1 = {name:"zlearn"}
var obj2 = obj1 //此時,obj2存的資料就是obj1的資料,obj1的資料就是物件的地址值
obj2.age = 12
console.log(obj1.age) 
//此時輸出的是{name:"zlearn",age:12}

以下要注意作用域

var a = {age:13}
function fn2(obj){ 
	obj={
		age:15
	}
}
fn2(a)
console.log(a.age)//輸出的是13不是15

棧:01x1001, 01x1002

​ ⬇ ⬇

堆:{age: 15} {age: 13}

變數a的值為01x1002

變數obj的值為01x1001

當程式執行時,fn2(a)這一步就相當於obj = a,obj的地址值指向的物件時{age:15},a的地址值還是01x1001,所以輸出的是13

js引擎如何管理記憶體?

記憶體生命週期:

分配小記憶體空間(變數的記憶體空間),得到它的使用權

儲存資料,可以反覆操作

釋放小記憶體空間

當var b = {} 要被釋放的時候,b自動釋放,b所指向的物件所在後面的某一個時刻由垃圾回收器回收。

物件被釋放的時候要成為垃圾物件,再被回收

相關文章