1、相关概念
内存的分类:
栈:全局变量,局部变量
堆:对象
变量:
值可以变化的量, 由变量名与变量值组成
一个变量对应一块小内存, 变量名用来查找到内存, 变量值就是内存中保存的内容
内存,数据, 变量三者之间的关系:
内存是一个容器, 用来存储程序运行需要操作的数据
变量是内存的标识, 我们通过变量找到对应的内存, 进而操作(读/写)内存中的数据
2、引用变量赋值问题
两个引用变量指向同一个对象(地址)时,通过一个引用变量修改对象内部数据,另一个引用变量也能看见
两个引用变量指向同一个对象, 让一个引用变量指向另一个对象, 另一个引用变量还是指向原来的对象
//2. 2个引用变量指向同一个对象,让一个引用变量指向另一个对象, 另一个引用变量还是指向原来的对象
var obj3 = {name: 'Tom'}
var obj4 = obj3
obj3 = {name: 'JACK'}
console.log()
function f2(obj) {
obj = {name: 'Bob'}
}
f2(obj4)
console.log()//注意这里也是Tom3、在js调用函数时传递变量参数时, 是值传递还是引用传递?
理解1 只有值传递, 没有引用传递, 传递的都是变量的值, 只是这个值可能是基本数据, 也可能是地址(引用)数据
理解2 可能是值传递,也可能是引用传递(地址值)(如果后一种看成是引用传递, 那就值传递和引用传递都可以有)
4、js内存管理
4.1 内存生命周期
分配需要的内存----使用分配到的内存(存储数据,可以反复操作)----不需要时将其释放/归还
4.2释放内存
(局部变量)为执行函数分配的栈空间内存: 函数执行完自动释放
(对象)存储对象的堆空间内存: 当内存没有引用指向时, 对象成为垃圾对象, 垃圾回收器后面就会回收释放此内存
















