JavaScript中变量的存储机理

本文深入解析JavaScript中的变量存储机制,涵盖基础类型与对象类型的存储差异,以及变量复制和传参问题,帮助理解JS内存管理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

JavaScript中变量的存储机理

js中的堆内存和栈内存

  • 基础类型
    • 包括
      • number
      • string
      • boolean
      • null
      • undefined
      • symbol
    • 基础类型的变量名和变量值都保存在栈内存中,具体形式如表所示:
      |变量名| 变量值|
      |–|--|
      | a | 10 |
      | b | 20 |
  • Object

    • 对象类型
    变量名变量值
    obj变量地址

    具体如图:
    对象类型的变量存储
    JavaScript对象这样存储的原因是,对象所需要的存储空间不固定,且所占的内存空间比较大,因此将对象分开存储,将变量名与变量所在的首地址存放在栈内存中,将变量的实际地址存放在栈内存中

与变量存储有关的变量复制问题,与对象类型的传值问题

  • 变量复制问题
    • 普通类型的变量复制
var a = 10;
var b = a;

a和b的存储结构如下表所示:

变量名变量值
a10
b10

a和b是互不影响的两个变量,修改b的值不会影响a的值

  • 对象的复制(在此只介绍概念,详见浅拷贝与深拷贝)
    • 浅复制
      • 复制对象的栈内存部分,即复制对象名与对象所在的地址,不复制对象的值
      • 在这里插入图片描述
    • 深复制
      • 复制变量栈内存中的部分和堆内存的部分
        在这里插入图片描述
  • 传参问题
    • 基本类型的传参就是将变量的值复制给参数
    • 对象的传参是将变量浅复制给参数
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值