JS栈内存和堆内存详解

2023-11-17

  • JS变量都存放在内存中,而内存给变量开辟了两块区域,分别为栈区域和堆区域
  • 栈像个容器,容量小速度快
  • 堆像个房间,容量较大

一、基本数据类型和引用数据类型存储方式

js中的数据类型可以分为基本类型和引用类型。
基本类型是存在栈内存中的,引用类型是存在堆内存中的,但是引用类型的引用还是存在栈内存中的。

var a = 10;
var b = "hello world";
var c = {
	name:"张三",
	age:30
}

这里声明了3个变量,在内存中的存放如下图:
在这里插入图片描述
可以看出引用类型在栈内存中,存放的是一个地址

二、变量声明的过程

var a = 10;
var c = {
	name:"张三",
	age:30
}

在变量声明的过程中,发生了三哥步骤:

1.创建一个值
  • 基本数据类型的值直接存储在栈内存中
  • 引用数据类型先开辟一个堆内存空间,把值存进去,最后生成地址放到栈内存中供变量关联使用
2.创建一个变量

根据声明时候的变量名来创建变量

3.让变量和值关联在一起

变量名和值之间的=号就是关联指向

三、堆内存和栈内存的案例

  • 案例一
var a = 12;
var b = a;
b=13;
console.log(a);//12

这个很好理解,栈内存中变量a指向12,又声明变量b等于a
b的值也指向12,b=13,b的值发生改变,不在指向12,而是指向13
a的值没有发生改变,始终指向13

  • 案例二
var a= {n:12};
var b = a;
b['n'] = 15;
console.log(a.n);//15

a的值是引用数据类型,开辟出一个堆内存
b的值也指向a相同的堆内存地址
b通过地址改变了堆内存中的数据
a始终指向相同的堆内存,数据也发生了改变

在这里插入图片描述

  • 案例三
 var a= {m:12};
 var b = a;
 b = {m:18}
 console.log(a.m);//12

变量a开辟出栈内存,声明变量b指向a的内存地址
变量b开辟出新的内存,指向a的关联指向作废
变量a的值始终指向之前的地址

在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

JS栈内存和堆内存详解 的相关文章

  • 如何将 Django 中的数组传递给模板并在 JavaScript 中使用它

    我想将数组传递给模板 然后通过 JavaScript 使用它 In my views py I have arry1 Str 500 20 return render to response test html array1 arry1 在
  • 我如何使用 querySelector() 选择具有双类的元素

    当我想使用 querySelector 选择元素时遇到问题 ul class xoxo blogroll ul 我怎样才能选择它ul元素 在我的代码中我像这样使用 var list document body querySelector u
  • JavaScript - 无需布尔值即可运行一次

    有没有办法只运行一段JavaScript代码ONCE 而不使用布尔标志变量来记住它是否已经运行过 具体来说not就像是 var alreadyRan false function runOnce if alreadyRan return a
  • 如何使用 JavaScript 选择预节点/块中的文本?

    我了解不允许 JS 将任意文本复制到剪贴板背后的安全原因 但是是否有一种方法可以通过单击按钮来选择预节点中的文本 类似于 select 函数在输入中的工作方式 我不是在寻找复制到剪贴板的 jQuery 插件 我只想突出显示预块中的文本 以便
  • 实现悬停信息框

    我有一个日历 当用户将鼠标悬停在单元格上时 会出现一个很大的信息框 其中包含该日期的详细信息 虽然当用户离开时使信息框消失 但我遇到了一些麻烦 我基本上想要它 这样当鼠标光标移出信息框隐藏的日历单元格时 它就会消失 但我遇到了麻烦 因为mo
  • Javascript 在另一个函数中检测“Shift”键按下

    我正在从 Flash 影片 使用外部接口 调用我的 html 页面中的 Javascript 函数 并且我想知道调用该函数时用户是否按下了 Shift 键 例如 如果我通过鼠标单击调用该函数 这似乎很简单 因为我可以传递事件并检查 if e
  • 在 setInterval / setTimeout 中使用变量作为时间[重复]

    这个问题在这里已经有答案了 这是一个示例情况 var count time 1000 setInterval function count 1 time 上面的代码会将 count 变量加 1 即 1000 毫秒 看来 setInterva
  • 如何知道浏览器空闲时间?

    如何跟踪浏览器空闲时间 我用的是IE8 我没有使用任何会话管理 也不想在服务器端处理它 这是纯 JavaScript 方法来跟踪空闲时间 并在达到一定限制时执行一些操作 var IDLE TIMEOUT 60 seconds var idl
  • 将 onclick 事件应用于页面加载时不存在的元素

    我将列表样式设置为看起来像选择框 并且当用户单击列表中的元素时我想触发一个函数 但是该元素是通过加载的AJAX因此 当页面加载并且我无法绑定时不存在onclick事件到它onDomReady 如果我把它作为一个普通的选择列表 我可以只标记一
  • 将 window.location 传递给 Flask url_for

    我正在使用 python 在我的页面上 当匿名用户转到登录页面时 我想将一个变量传递到后端 以便它指示用户来自哪里 发送 URL 因此 当用户单击此锚链接时 a href Sign in a 我想发送用户当前所在页面的当前 URL
  • 有没有办法伪造同步 XHR 请求?

    我正在使用 Emscripten 系统将一堆 C 代码移植到 Javascript C 代码有很多调用fopen这是一个同步 IO 调用 在 Emscripten 中 我们使用对本地资源的 XHR 请求来模拟这一点however 在 Fir
  • JavaScript Promise 不执行 .then()

    我在 JavaScript 中的 Promise 方面遇到了一些问题 我想做的是获得一个地址列表 然后对于每个地址 我需要调用地理编码 API 来获取 lat lng 然后我将继续将标记与热图一起绘制 这是我的代码 let promiseK
  • JavaScript 中的实时摩尔斯电码转换器

    在看到谷歌关于莫尔斯电码 gmail 的愚人节笑话后 我想我应该尝试用 javascript 创建一个实时莫尔斯电码转换器 我正在使用正则表达式和替换将莫尔斯电码更改为字符 例如 replace g a replace g r 我遇到的问题
  • 是否可以将请求标头添加到 CORS 预检请求中?

    我有一个从外部服务器 不是服务器 访问 API 的网站 为网站提供服务 通过简单的XmlHttpRequest 见下文 那个API 需要将用于访问服务的 API 密钥添加为请求标头 然而 正如这些CORS https developer m
  • 不使用控件时,视频元素在 Chrome 中消失

    So I think这是一个浏览器错误 它出现在一个更复杂的设计 网站中 但我已经进行了很好的尝试 简化了我的代码和设计等 并发现了以下内容 嵌入时
  • Javascript onload 不起作用[关闭]

    这个问题不太可能对任何未来的访客有帮助 它只与一个较小的地理区域 一个特定的时间点或一个非常狭窄的情况相关 通常不适用于全世界的互联网受众 为了帮助使这个问题更广泛地适用 访问帮助中心 help reopen questions 我正在使用
  • Django 将 JSON 数据传递给静态 getJSON/Javascript

    我正在尝试从 models py 中获取数据并将其序列化为views py 中的 JSON 对象 模型 py class Platform models Model platformtype models CharField max len
  • 使用 AJAX 和 JQuery 按设定的时间间隔刷新 Rails 部分

    I have a page in my rails application that looks like 现在 我有另一个用 python 编码的人工智能应用程序 它处理视频 显示在 Rails 应用程序页面的左侧 并使用捕获的车辆及其相
  • Javascript 中 if 语句中的假值?

    过去两周 我在学校研究 JavaScript 的事情已经有一段时间了 而且我一直在做我的作业 在 Douglas Crockford 所著的 JavaScript The Good Parts 一书中 作者在第 11 页上列出了 if 语句
  • 具有固定顶部菜单的语义 UI 侧边栏

    Semantic UI 对其进行预警侧边栏页面 http semantic ui com modules sidebar html usage 当侧边栏出现时 固定位置内容可能会出现改变其位置的问题 然后它提供了该问题的两种可能的解决方案

随机推荐

  • C# System.UnauthorizedAccessException:“对路径“C:\xxx”的访问被拒绝。

    C 程序运行时提示 对路径 C xxx 的访问被拒绝 System UnauthorizedAccessException 对路径 C Excel2007 xlsx 的访问被拒绝 解决办法是 启动visual studio时选择右键 gt
  • System.in.read()问题

    来源 http zhidao baidu com question 74164319 Q System in read 中in是一个字段即静态常量 JAVA帮助文档中 public static final InputStream in 那
  • MAC地址介绍及相关操作

    一 MAC地址介绍 MAC地址简介 MAC Mediun access cntrol 地址 用来表示互联网每一个站点的标识符 采用十六进制数表示 共六个字节 其中 前三个字节是由IEEE的注册管理机构RA负责给不同厂家分配的代码 也称为 编
  • ArcGIS 10.8打开后显示loading document后闪退

    安装ArcGis完成后 打开ArcMap 卡在Loading Document后 闪退的问题 为何为肖的博客 CSDN博客 arcmap加载文档后闪退b同事新装ArcGis10 5后出现这个情况 联想以前编译Qgis时python环境变量的
  • 由一个例子,介绍linux目录的多用户及其读写可执行权限

    例子 查看文件的读写权限以及所属用户 查看目录的读写权限以及所属用户 目录读写权限默认为755即rwxr xr x 文件读写权限默认为744即rwxrr 目录和子目录的读写权限特点 例子 ls ld home1 drwxrwxrwx 39
  • 模板小程序是什么?怎么选择?

    模板小程序是指第三方服务商基于某个模板开发的小程序 这个模板可以根据开发者的需求进行定制 包括页面设计 功能模块 数据管理等方面 开发者可以在模板基础上进行自主开发 实现自己的需求和功能 模板小程序的优点是开发周期短 价格相对较低 一般是直
  • 白夜追凶 :手 Q 图片的显示和发送逻辑

    欢迎大家前往腾讯云社区 获取更多腾讯海量技术实践干货哦 作者 陈舜尧 导语 这张图片在快捷发图栏背景是黑色的 为啥发到AIO 会话窗口 里背景就变成白的了 通过一个bug单 对黑白背景问题跟进的过程中发现了手q中很多奇怪的表现 一层层看代码
  • SpringBoot支付宝接入实战

    文章目录 支付宝支付后端实战 基于SpringBoot 一 支付宝支付介绍及接入指引 1 支付宝开放能力介绍 1 能力地图 2 电脑网站支付产品 2 接入准备 1 开放平台帐号注册 2 常规接入流程 3 使用沙箱 二 项目的环境准备 1 框
  • js小案例

    一次性定时器 div class dn div
  • C++,命名空间

    命名空间定义 namespace 命名空间名 变量名 函数 结构体 枚举名 全局引入命名空间 using namespace 命名空间名 部分引入命名空间 using namespace 命名空间名 变量名 注意 表示域限定符 在哪个位置使
  • 【实战加详解】二进制部署k8s高可用集群教程系列二 - ssl 证书简介

    TIP 二进制部署 k8s ssl 证书 转载请注明出处 https janrs com 1 ssl 证书简介 NOTE 在这里只做应用的简介 原理不做介绍 自行谷歌查阅 涉及到安全的 也不整理文档了 自行研究 1 1 什么是 ssl 证书
  • Java实现:寻找水仙花数

    Java实现 寻找水仙花数 文章目录 Java实现 寻找水仙花数 1 问题 2 解决方案 3 实现代码 4 执行结果 5 解决方法说明 穷举法 1 问题 寻找水仙花数 如果一个3位数等于其各位数字的立方和 则称这个数为水仙花数 例如 407
  • 奇异值分解方法求解最小二乘问题的原理

    文章目录 一 奇异值分解 SVD 原理 1 1 回顾特征值和特征向量 1 2 SVD的定义 1 3 求出SVD分解后的U V矩阵 1 4 SVD计算举例 1 5 SVD的一些性质 二 线性最小二乘问题 2 1 最小二乘问题复习 2 2 奇异
  • 最小二乘法拟合圆(Python)

    上文已经对比了三种数据点拟合圆的方法 本文分享最小二乘法的拟合过程 旨在了解如何用Python编程拟合圆 usr bin env python coding utf 8 This program is debugged by Harden
  • Markdown插入视频、mp3音频和gif图的语法

    总所周知 鄙人有一个专栏叫做 差生文具多 里面记录了一些工具的使用方法 以及使用工具时会遇到的一些问题 于是乎 之前就有一个朋友在群里问道 markdown如何插入视频 当时的我不会弄 然后就出现了下面这一幕 明天就弄 开整 然而这篇博客是
  • ARM64_VS2017 动态库 静态库编译 主程序调用环境搭建

    ARM64 VS2017 动态库 静态库编译 主程序调用环境搭建 1 打开Visual Studio Installer安装linux开发环境 2 配置linux环境 工具 gt 选项 gt 跨平台 gt 连接管理器 gt 添加 远程lin
  • mkdir()和mkdirs()区别

    mkdir 和mkdirs 区别如下 mkdirs 可以建立多级文件夹 mkdir 只会建立一级的文件夹 如下 new File tmp one two three mkdirs 执行后 会建立tmp one two three四级目录 n
  • 算法:回文字符串

    要求 给定一个字符串数组 判断出所有的回文字符串 class Solution public List
  • 预备打工人之SystemC学习 (五) 事务级建模库

    预备打工人之SystemC学习 TLM2 0基本概念 松散定时建模 近似定时模型 近似定时建模和松散定时建模的使用 发起者 目标 套接字和桥 DMI和调试传送结构 合并接口和套接字 名字空间和头文件 通用净核类 定义 构造 赋值和析构函数
  • JS栈内存和堆内存详解

    JS变量都存放在内存中 而内存给变量开辟了两块区域 分别为栈区域和堆区域 栈像个容器 容量小速度快 堆像个房间 容量较大 一 基本数据类型和引用数据类型存储方式 js中的数据类型可以分为基本类型和引用类型 基本类型是存在栈内存中的 引用类型