内存和赋值

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.释放内存
局部变量:函数执行完成后自动释放
对象:成为垃圾对象===>垃圾回收器回收
全局变量:通常不会释放生命周期

相关文章
相关标签/搜索