內存和賦值

1.var a = xxx // a的內存中保存的是什麼?

  1. xxx是基本類型數據,a內存中保存的就是這個xxx數據
  2. xxx是對象類型,a內存中保存的就是對象的地址值
  3. xxx是一個變量,a內存中保存的xxx的內存內容(多是基本類型數據,也多是地址值)
var obj1 = {name: 'Tom'}
var obj2 = obj1 //將obj1內存中保存的地址值給obj2的內存中保存
obj1.name = 'Jack'
console.log(obj2.name) // Jack
obj2.sex = '男'
console.log(obj1.sex) // 男
function func(obj) { 
  obj.name = 'Sun'
}
func(obj1) // 將obj1實參賦值給形參obj
console.log(obj2.name) // Sun

注:2個引用變量指向同一個對象,經過一個變量改變對象內部數據,另外一個變量看到的是修改後的數據函數

var a = {age: 12}
var b = a
a = {name: 'HM', age: 15}
b.age = 14
console.log(b.age, a.age) // 14  15
function func1(obj) {
  obj = {age: 18}
}
func1(a)
console.log(a.age) // 15

注:2個引用變量指向同一個對象,讓其中一個引用變量指向另外一個對象,另外一個引用變量依然指向前一個對象code

2.在js調用函數時傳遞變量參數時,是值傳遞仍是引用傳遞?

理解1:都是值(基本類型/地址值)傳遞
理解2:多是值傳遞,也多是引用傳遞(地址值)對象

3.JS引擎如何管理內存?

1.內存生命週期
分配小內存空間,獲得它的使用權
存儲數據,能夠反覆進行操做
釋放小內存空間
2.釋放內存
局部變量:函數執行完成後自動釋放
對象:成爲垃圾對象===>垃圾回收器回收
全局變量:通常不會釋放生命週期

相關文章
相關標籤/搜索