news 2026/6/13 4:53:36

JS变量存储:栈与堆的奥秘

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
JS变量存储:栈与堆的奥秘

在 JavaScript 中,变量的存储方式取决于其类型:

一、基础类型(Primitive Types)

包括:undefined,null,boolean,number,string,symbol,bigint
存储特点:

  1. 直接存储在**栈内存(Stack)**中
  2. 变量保存的是实际值
  3. 赋值操作会创建值的副本
leta=10;letb=a;// b 获得 a 的副本a=20;// 修改 a 不影响 bconsole.log(b);// 输出 10(值不变)

二、引用类型(Reference Types)

包括:Object,Array,Function,Date
存储特点:

  1. 实际数据存储在**堆内存(Heap)**中
  2. 变量保存的是指向堆内存地址的指针
  3. 赋值操作仅复制指针(浅拷贝)
letobj1={name:"Alice"};letobj2=obj1;// obj2 复制 obj1 的指针obj1.name="Bob";// 修改堆内存中的数据console.log(obj2.name);// 输出 "Bob"(指针指向同一数据)

三、内存机制对比

特性基础类型引用类型
存储位置栈内存堆内存
赋值行为复制值本身复制指针(内存地址)
比较操作值相等即可(5 === 5需指针相同({} !== {}
内存管理随栈帧销毁自动回收需通过垃圾回收机制(GC)

四、关键差异说明

  1. 函数参数传递

    functionchangePrimitive(val){val=100;// 不影响外部变量(值传递)}functionchangeReference(obj){obj.prop="changed";// 修改堆内存(指针传递)}
  2. 深拷贝解决方案

    // 引用类型需显式深拷贝才能完全独立constoriginal={a:1,b:{c:2}};constdeepCopy=JSON.parse(JSON.stringify(original));

理解这两种存储机制对避免 JavaScript 的常见陷阱(如意外修改共享对象)至关重要。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/12 22:57:38

MinIO连接失败?5步解决no such host错误

好的,我们来分析一下在使用 openlist/alist 存储选择 MinIO 时出现 no such host 错误的常见原因和解决方法。这个问题通常与网络配置或服务发现有关。 1. 检查 MinIO 服务端地址配置是否正确 问题描述: 在 alist 的存储配置中,Endpoint 字…

作者头像 李华
网站建设 2026/6/10 21:49:37

3步彻底清理Windows系统:OneDrive完全卸载终极指南

3步彻底清理Windows系统:OneDrive完全卸载终极指南 【免费下载链接】OneDrive-Uninstaller Batch script to completely uninstall OneDrive in Windows 10 项目地址: https://gitcode.com/gh_mirrors/on/OneDrive-Uninstaller 想要完全移除Windows系统中的O…

作者头像 李华
网站建设 2026/6/10 18:18:48

企业级实时文档协作系统:从零搭建到高效部署实战指南

企业级实时文档协作系统:从零搭建到高效部署实战指南 【免费下载链接】tiptap 项目地址: https://gitcode.com/gh_mirrors/tip/tiptap 还在为团队文档协作效率低下而头疼?当多人同时编辑文档时,你是否经常遇到格式错乱、内容冲突、历…

作者头像 李华
网站建设 2026/6/2 11:31:10

FastReport开源报表生成器:让数据报表变得如此简单

还在为项目中的报表生成而头疼吗?FastReport Open Source 这款专为 .NET 开发者设计的免费开源报表工具,正在彻底改变数据报表的生成方式。想象一下,只需几行代码就能生成专业级的文档报表,这不再是梦想! 【免费下载链…

作者头像 李华
网站建设 2026/6/11 4:55:50

一位全加器多风格Verilog编码对比分析

一位全加器的多风格Verilog实现:从门级到行为级的深度实践在数字电路设计的世界里,一位全加器(Full Adder)就像编程中的“Hello, World!”——简单却意义深远。它不仅是加法运算的基本单元,更是理解硬件描述语言&#…

作者头像 李华
网站建设 2026/6/9 23:40:13

Cursor Free VIP终极指南:免费解锁AI编程工具完整功能

Cursor Free VIP终极指南:免费解锁AI编程工具完整功能 【免费下载链接】cursor-free-vip [Support 0.45](Multi Language 多语言)自动注册 Cursor Ai ,自动重置机器ID , 免费升级使用Pro 功能: Youve reached your tri…

作者头像 李华