内存和赋值

7次阅读

共计 759 个字符,预计需要花费 2 分钟才能阅读完成。

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 个引用变量指向同一个对象,让其中一个引用变量指向另一个对象,另一个引用变量依然指向前一个对象

2. 在 js 调用函数时传递变量参数时,是值传递还是引用传递?

理解 1:都是值(基本类型 / 地址值)传递
理解 2:可能是值传递,也可能是引用传递(地址值)

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

1. 内存生命周期
分配小内存空间,得到它的使用权
存储数据,可以反复进行操作
释放小内存空间
2. 释放内存
局部变量:函数执行完成后自动释放
对象:成为垃圾对象 ===> 垃圾回收器回收
全局变量:一般不会释放

正文完
 0