内存图/垃圾回收/深浅拷贝
今天深入了解this
的时候,涉及到了基本类型和对象在内存中不同的引用方式,所以巩固一下内存的相关知识。
内存图
- JS引擎拿到分配的内存之后会分为两个大区
代码区
和数据区
,比如var a = 1
其中的a
就会放到代码区,1
会被放到数据区,至于他们是怎么对应起来的,这是JS引擎负责的。 - 数据区分为两部分
Stack栈内存
和Heap堆内存
,JS中的基本数据类型(Number
String
Null
Undefined
Boolean
Symbol
)的值都有固定的大小,往往都保存在Stack栈内存
中(闭包除外,String
两种说法都对),由系统自动分配存储空间。我们可以直接操作保存在栈内存空间的值,因此基础数据类型都是按值访问。

=
其实是把右边的在Stack栈内存
中存的地址复制到左边去。下图中的第三行,执行的顺序是:
首先从左往右看,获取a的地址(两个都是34
),然后再从右往左开始执行,先是把{n:2}
的地址54给a
,接着在地址为34的堆内存里写一个x:ADDR54
。

本作品采用 知识共享署名-相同方式共享 4.0 国际许可协议 进行许可。