1.var a = xxx // a的内存中保存的是什么?
- xxx是基本类型数据,a内存中保存的就是这个xxx数据
- xxx是对象类型,a内存中保存的就是对象的地址值
- 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.释放内存
局部变量:函数执行完成后自动释放
对象:成为垃圾对象===>垃圾回收器回收
全局变量:一般不会释放
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。