原始类型 vs. 对象(基本类型 vs. 引用类型)

原始类型

首先我们先看一段代码:

let age = 30;
let oldAge = age;
age = 31;
console.log(age);
console.log(oldAge);

在这里插入图片描述

在 JavaScript 中,原始类型的赋值是通过值复制的方式进行的,而不会相互影响。只有对象类型的值才是通过引用复制的方式进行的,会相互影响。

对象

const me = {name: 'Jonas',age: 30,
};const friend = me;
friend.age = 27;
console.log('Friend:', friend);
console.log('Me:', me);

对象类型的赋值是通过引用复制的方式进行的,它们共享同一个对象,因此对其中一个变量的修改会影响到另一个变量。

复习:基本类型、对象和 JAVASCRIPT 引擎

基本类型
● Number
● String
● Boolean
● Undefined
● Null
● Symbol
● BiGInt

对象
● Object literal
● Arrays
● Functions
● Many more…

JavaScript引擎

在这里插入图片描述

在JavaScript引擎中,存在两个主要的内存区域:调用栈(call stack)和堆(heap)。

  1. 调用栈(Call Stack): 调用栈是一种用于追踪函数调用的机制。它用于跟踪执行上下文,即当前正在执行的函数以及该函数内部可能嵌套的其他函数。每当函数被调用时,一个新的执行上下文会被压入调用栈的顶部,并在函数执行完毕后从栈顶弹出。这种方式遵循"先进后出"的原则(Last-In-First-Out, LIFO)。
    当代码执行到一个函数调用时,将会在调用栈上创建一个新的栈帧(stack frame),表示该函数的执行上下文。栈帧包含了函数的局部变量、参数、返回地址等信息。当函数执行完毕时,对应的栈帧将从调用栈中移除。
  2. 堆(Heap): 堆是用于动态分配内存的区域,用于存储对象、数组等复杂数据类型。在堆内存中,对象的创建和销毁不受调用栈上的函数调用影响,而是由 JavaScript 的垃圾回收器负责管理。
    在堆中,通过引用来操作和访问对象。引用是指保存对象在堆内存中地址的值。在 JavaScript 中,变量存储的是对象的引用,而不是对象本身。通过引用,我们可以访问和修改堆内存中的对象。
    调用栈和堆是 JavaScript 引擎在内存中管理代码执行和数据存储的重要部分。调用栈跟踪函数的执行顺序,而堆存储了动态分配的对象和数据。

现在我们仔细的分析上述的两段代码

let age = 30;
let oldAge = age;

在这里插入图片描述

let age = 30;
let oldAge = age;
age = 31;
console.log(age);
console.log(oldAge);

在这里插入图片描述

再看看对象的那段代码

const me = {name: 'Jonas',age: 30,
};

在这里插入图片描述

const me = {name: 'Jonas',age: 30,
};const friend = me;
friend.age = 27;
console.log('Friend:', friend);
console.log('Me:', me);

在这里插入图片描述

"JavaScript在幕后是如何工作的"可以作为以后学习的主题。

  1. 原型继承:JavaScript中的面向对象编程(OOP)
  2. 事件循环:异步JavaScript:Promises、Async/Await和AJAX
  3. 事件循环:异步JavaScript:Promises、Async/Await和AJAX

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/202374.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

获取ip属地(ip2region本地离线包-超简单)

背景 最近有涉及要显示ip属地,但我想白嫖,结果就是白嫖的api接口太慢了,要延迟3到4秒左右,很影响体验,而且不一定稳定。 结果突然看到了这个【ip2region】开源项目,离线识别ip属地,精度自己测…

广播组播、本地套接字通信、wireshark、以太网帧格式、三次握手四次挥手

广播(使用 UDP 套接字) 广播地址:主机号最大的地址。 广播:给所在局域网的所有主机发送数据报。(之前的数据报发送方式是单播。) 以下情况中使用广播: 局域网 搜索协议。 比如家中的智能产品&a…

centos7安装MySQL—以MySQL5.7.30为例

centos7安装MySQL—以MySQL5.7.30为例 本文以MySQL5.7.30为例。 官网下载 进入MySQL官网:https://www.mysql.com/ 点击DOWNLOADS 点击链接; 点击如上链接: 选择对应版本: 点击下载。 安装 将下载后的安装包上传到/usr/local下…

Eclipse常用设置-乱码

在用Eclipse进行Java代码开发时,经常会遇到一些问题,记录下来,方便查看。 一、properties文件乱码 常用的配置文件properties里中文的乱码,不利于识别。 处理流程:Window -> Preferences -> General -> Ja…

万宾科技智能井盖传感器效果,特点有哪些?

现在城市发展越来越好,对基础设施的改造越来越多,比如修路搭桥、整改生态等都是为民服务的好工程。平时走在路上我们享受着平整的路面,井然有序的交通也为我们带来很大的方便。但是一个又一个的井盖看起来无关紧要,实际上如果路上…

Linux安装Mysql详细教程(两种安装方法)

Linux之Mysql安装配置 第一种:Linux离线安装Mysql(提前手动下载好tar.gz包)第二种:通过yum安装配置Mysql(服务器有网络) 第一种:tar.gz包安装 1、 查看是否已经安装 Mysql rpm -qa | grep m…

论文阅读:MedSegDiff: Medical Image Segmentation with Diffusion Probabilistic Model

论文标题: MedSegDiff: Medical Image Segmentation with Diffusion Probabilistic Model 翻译: MedSegDiff:基于扩散概率模型的医学图像分割 名词解释: 高频分量(高频信号)对应着图像变化剧烈的部分&…

SqlServer_idea连接问题

问题描述: sqlServer安装之后可以使用navicat进行连接idea使用账户密码进行登录连接失败 问题解决: 先使用sqlServer管理工具进行登录 使用window认证连接修改账户密码 启用该登录名 这时idea还是无法连接,还需要如下配置 打开sqlserve…

机器学习第12天:聚类

文章目录 机器学习专栏 无监督学习介绍 聚类 K-Means 使用方法 实例演示 代码解析 绘制决策边界 本章总结 机器学习专栏 机器学习_Nowl的博客-CSDN博客 无监督学习介绍 某位著名计算机科学家有句话:“如果智能是蛋糕,无监督学习将是蛋糕本体&a…

3D人脸扫描设备助力企业家数字人复刻,打破商业边界

京都薇薇推出数字人VN,以京都薇薇董事长为原型制作,赋能品牌直播、短片宣传、线上面诊等活动,进一步增强消费者对品牌的交互体验,把元宇宙与品牌相融合,推动品牌线上服务与线下服务实现数字一体化,打造一个…

智能座舱架构与芯片- (13) 软件篇 下

四、面向服务的智能座舱软件架构 4.1 面向信号的软件架构 随着汽车电子电气架构向中央计算-域控制器的方向演进,甚至向车云一体化的方向迈进,适用于汽车的软件平台也需要进行相应的进化。 在传统的观念中,座舱域即娱乐域,座舱软…

地埋式积水监测仪厂家直销推荐,致力于积水监测

地埋式积水监测仪是一种高科技设备,能够实时监测地面积水深度,并及时发出预警信息,有效避免因积水而产生的安全隐患。这种智能监测仪可以安装在城市道路、立交桥、地下车库等易积水地势较低的地方,以确保及时监测特殊地段的积水&a…

Spring框架学习 -- 读取和存储Bean对象

目录 🚀🚀 回顾 getBean()方法的使用 根据name来获取对象 再谈getBean() (1) 配置扫描路径 (2) 添加注解 ① spring注解简介 ② 对类注解的使用 ③ 注解Bean对象的命名问题 ④ 方法加Bean注解 (3) Bean 注解的重命名 (4) 获取Bean对象 -- …

Linux本地MinIO存储服务远程调用上传文件

🔥博客主页: 小羊失眠啦. 🎥系列专栏:《C语言》 《数据结构》 《Linux》《Cpolar》 ❤️感谢大家点赞👍收藏⭐评论✍️ 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,…

如何通过类似于Android adb install apk 命令安装三方Harmony Hap包

安装命令 hdc install xxx.hapOpenHarmony设备安装Hap应用的五种方式 https://www.51cto.com/article/762223.htmlhttps://www.51cto.com/article/762223.html DevEco Studio 3.1为例新建个项目,点击File->Project Structure 进入签名页面然后点击Sign in登录华…

基于C#实现赫夫曼树

赫夫曼树又称最优二叉树,也就是带权路径最短的树,对于赫夫曼树,我想大家对它是非常的熟悉,也知道它的应用场景,但是有没有自己亲手写过,这个我就不清楚了,不管以前写没写,这一篇我们…

css animation 动画如何保留动画结束后的状态 animation-fill-mode: forwards

css animation 动画如何保留动画结束后的状态 animation-fill-mode: forwards 一、问题描述 在做一个弹窗动画提示的时候遇到了一个问题: 在动画结束的时候,移除元素时会有闪一下的问题,像这样,有残留的痕迹。 我的动画结尾是这…

Vue3 封装组件库并发布到npm仓库

一、创建 Vue3 TS Vite 项目 输入项目名称,并依次选择需要安装的依赖项 npm create vuelatest 项目目录结构截图如下: 二、编写组件代码、配置项和本地打包测试组件 在项目根目录新建 package 文件夹用于存放组件 (以customVideo为例&a…

LeSS敏捷框架高效生产力实践

每个团队可能都有一套适合自己的敏捷方法,本文介绍了ResponseTap工程团队通过采用LeSS框架、引入准备周,从而提升迭代冲刺研发效能的实践。原文: LeSS Agile, More Productive — Part 1: Pain[1], LeSS Agile, More Productive — Part 2: Promise, LeS…

2023亚太杯数学建模APMCM竞赛C题思路讲解:基于ARIMA与机理模型进行预测

本文针对6大问题,从多角度分析了我国新能源电动汽车发展形势与前景。文中针对不同问题,采用了层次分析法、时间序列模型、机理模型、回归模型等数学方法。并结合实例数据,对相关模型进行求解,以量化预测了新能源电动汽车在政策驱动、市场竞争、温室气体减排等多个方面的潜在贡献…