变量在内存栈堆中的存储

全局对象GO(Global Object)

变量对象VO(Variable Object)

活动对象AO(Active Object):每个执行上下文都会有一个自己的变量对象,函数私有上下文中叫活动对象,也是私有变量。

变量在内存栈堆中的存储

原理:

JavaScript中创建变量的方式(其实都是变量和值产生关联的过程):

  1. 先创建左边变量,再创建右边值,然后等号关联。

  2. 注意先看是不是创建变量,然后看看右边是不是创建值。

  3. 连等赋值的时候(a = b = 3),最右边先产生关联(即 b = 3;a = 3);但下图中是a.x先产生关联(不论它在左边还是右边),因为a.x属于成员访问,运算优先级很高。

在这里插入图片描述

解释:(一个变量只能指向一个地址)

  • let a = {n:1}, 先给a分配一个栈空间,然后给{n:1}分配一个堆内存地址,然后让a指向对内存地址(产生关联)。
  • let b = a, 让b 指向a的指向地址
  • a.x = a = {n:2}, 先产生一个a的属性x(对象中有这个属性就修改,没有就新增),创建一个新值{n:2},让a.x指向新值的堆内存地址AAAFFF111(此时a仍是指向AAAFFF000);让a 指向这个新值的地址

在这里插入图片描述

解释:

  • 前三行结果是n、m、x指向同一个地址AAAFFF000
  • m[0]修改了数组第一个数
  • x = [30,40], x[0] = 200; 创建了新值(等同于第一行代码),x指向了新的内存地址AAAFFF111;并修改了第一个数
  • m = x ,m[1] = 300, 将m 重新和x建立关联,并修改了数组第一个值
  • n[2] = 400, 数组n中新增第三个数

函数在内存中的运行在这里插入图片描述

其他知识

在这里插入图片描述
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值