内存图
- JS 引擎将内存分为代码区和数据区
- 我们只研究数据区
- 数据区分为 Stack(栈内存) 和 Heap(堆内存)
- 简单类型的数据直接存在 Stack 里
- 复杂类型的数据是把 Heap 地址存在 Stack 里
内存图是个什么鬼?
基本类型(number,string,boolean,null,undefined,symbol)的值存放在栈内存中
复杂类型(object),对象放在堆内存中,对象的地址存放在栈内存中,地址指向对象,保存地址的变量称之为
对象的引用 例: var a = {name:'a'}; a为对象{name:'a'}的引用,a中存的是对象的地址
用几道题来理解内存图
题目1
题目2
题目3(有点难)
a.x = a = {n:2}
//对象{n:2}的地址为54,a={n:2};则a保存的地址由34变为54
//a.x = a = {n:2}==> 34.x = 54 = {n:2}
什么是垃圾回收
如果一个对象没有被引用,它就是垃圾,将被回收
如同一个没有梦想的人,就是咸鱼,将被淘汰
例1
例2
function fn(){}
document.body.onclick=function(){
fn()
}