今天深入了解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

一道面试题