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


hustersong
17 声望0 粉丝

« 上一篇
Promise的理解
下一篇 »
this的理解