原始类型 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.mfbz.cn/a/176147.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【数据结构(三)】双向链表(2)

文章目录 1. 基本概念2. 管理双向链表的思路3. 代码实现 1. 基本概念 管理单向链表的缺点分析: ①单向链表,查找的方向只能是一个方向,而双向链表可以向前或者向后查找。     ②单向链表不能自我删除,需要靠辅助节点 ,而双向…

基于springboot实现在线外卖平台系统项目【项目源码】

基于springboot实现在线外卖平台管理系统演示 Java技术 Java是由SUN公司推出,该公司于2010年被oracle公司收购。Java本是印度尼西亚的一个叫做爪洼岛的英文名称,也因此得来java是一杯正冒着热气咖啡的标识。Java语言在移动互联网的大背景下具备了显著的…

AUTOSAR实战篇:基于ETAS工具链的信息安全协议栈集成指南

AUTOSAR实战: 基于ETAS工具链的信息安全协议栈集成指南 前言 小T出品,必是精品! 手把手带你集成信息安全协议栈,你值得拥有! 正文 随着汽车信息安全的不断发展与完善,其在汽车电子领域如智能驾驶(ADAS),智能座舱等方向上不断被重视起来,越来越多的Tier1,主机厂都在全面…

LeetCode:2304. 网格中的最小路径代价(C++)

目录 2304. 网格中的最小路径代价 题目描述: 实现代码: dp(dp有很多相似的经典题目,比较简单,不再给出解析) 2304. 网格中的最小路径代价 题目描述: 给你一个下标从 0 开始的整数矩阵 grid …

中国信息通信研究院发布《中国金融科技生态白皮书》(2023)

加gzh“大数据食铁兽”,回复“20231122”,获取材料完整版 导读 本白皮书是中国信息通信研究院连续第六年针对金融科技领域的跟踪研究成果,聚焦过去一年来国内外金融科技领域新的发展情况,重点分析了中国金融科技产业、技术、市…

vue3组件化开发页面之渲染函数实现

文章目录 前言一、渲染机制虚拟 DOM渲染管线 二、渲染函数基本用法声明渲染函数Vnodes 必须唯一 三、页面使用渲染函数及组件配置总结如有启发,可点赞收藏哟~ 前言 组件化开发是目前开发的常态 本文记录页面拆分多个不同组件模块,然后再基于渲染函数实现…

智能交通收费RFID读写器在不停车收费(ETC)系统中的应用

随着公路收费规模的不断扩大,传统的人工收费效率低下,收费没有监督,导致票款流失严重甚至还有车辆非法逃票。为了解决这些问题,引入了RFID等多种技术的新型的收费系统-不停车收费(ETC)系统应运而生。 电子不停车收费系统(ETC)系统…

PMP考试

一、关于准考信下载 为确保您顺利进入考场参加xxx月份考试,请及时登录本网站个人系统下载并打印准考信,准考信下载时间为xxx-xxx。如通过以上方式无法查找准考信,请您及时拨打所在考点老师联系电话,如有特殊问题,请发…

VUE+element可以为空不为空时只能为(正整数和0)的验证

rule{ 变量: [ { required: true, validator: validateparamPosition, trigger: blur }] } ​​​​​​​ ​​​​​​​ ​​​​​​​ var validateparamPosition (rule, value, callback) > { if (!value) { //先判断空可以过 ca…

VirtualBox+Vagrant安装虚拟机

文章目录 一、下载Virtualbox和Vagrant1、下载2、安装 二、安装虚拟机1、新建目录D:\VirtualMachine2、执行vagrant init centos/7命令,就会在该目录下创建Vagrantfile文件3、执行vagrant up命令4、查看当前主机分给虚拟机的网关网段5、找到D:\VirtualMachine下的Va…

涉密人员离职怎么做好安全管理?

在信息安全领域,涉密人员的离职安全管理具有极其重要的意义。一旦涉密人员离职,可能会对单位的信息安全造成威胁,因此必须采取有效的措施来确保涉密人员离职后的信息安全。 一、涉密人员离职安全管理的现状 目前,许多单位在涉密人…

从零开始安装并运行YOLOv5

从零开始安装并运行YOLOv5 该文主要实现用YOLOv5的基准检测为自己的视频片段渲染对象检测结果和边界框,本文大部分都是实操,帮助大家快速上手。 什么是YOLOv5? ​ yolo是一种用于对象检测的最先进的机器学习模型,yolo有不同的版…

Linux OpenGauss 数据库远程连接

目录 前言 1. Linux 安装 openGauss 2. Linux 安装cpolar 3. 创建openGauss主节点端口号公网地址 4. 远程连接openGauss 5. 固定连接TCP公网地址 6. 固定地址连接测试 前言 openGauss是一款开源关系型数据库管理系统,采用木兰宽松许可证v2发行。openGauss内核…

Jenkins 配置节点交换内存

查看交换内存 free -hswapon -s创建swap文件 dd if/dev/zero of/mnt/swap bs1M count1024启用交换文件 设置权限 chmod 600 /mnt/swap设置为交换空间 mkswap /mnt/swap启用交换 swapon /mnt/swap设置用户组 chown root:root /mnt/swap查看 swapon -s重启系统也能生效还需要修…

Vue中的$nextTick

​🌈个人主页:前端青山 🔥系列专栏:Vue篇 🔖人终将被年少不可得之物困其一生 依旧青山,本期给大家带来vue篇专栏内容:vue中的$nextTick 目录 🐋Vue中的$nextTick有什么作用? 🐋一、…

创建用户报错:ORA-65096: 公用用户名或角色名无效

题主的Oracle版本是最新的Oracle 21 描述: 1、在命令行工具 给Oracle创建用户,create user c##用户名identifed by 密码,报错:【ORA-65096: 公用用户名或角色名无效】 2、在navicat创建用户,提示如下: 解…

(动手学习深度学习)第13章 实战kaggle竞赛:狗的品种识别

文章目录 1. 导入相关库2. 加载数据集3. 整理数据集4. 图像增广5. 读取数据6. 微调预训练模型7. 定义损失函数和评价损失函数9. 训练模型 1. 导入相关库 import os import torch import torchvision from torch import nn from d2l import torch as d2l2. 加载数据集 - 该数据…

Figma最全面的新手指南,从基础到高级,一网打尽

1 Figma界面介绍 Figma基础界面与传统设计软件没有太大区别,有Sketch使用经验的用户几乎可以无缝连接到Figma。 立即体验 免费的在线Figma汉化版即时设计是一款支持在线协作的专业级 UI 设计工具,支持 Sketch、Figma、XD 格式导入,海量优质设…

【计算机网络】多路复用的三种方案

文章目录 1. selectselect函数select的工作特性select的缺点 2. pollpoll函数poll与select的对比 3. epollepoll的三个接口epoll的工作原理epoll的优点LT和ET模式epoll的应用场景 🔎Linux提供三种不同的多路转接(又称多路复用)的方案&#xf…

图解Spark Graphx基于connectedComponents函数实现连通图底层原理

原创/朱季谦 第一次写这么长的graphx源码解读,还是比较晦涩,有较多不足之处,争取改进。 一、连通图说明 连通图是指图中的任意两个顶点之间都存在路径相连而组成的一个子图。 用一个图来说明,例如,下面这个叫graph…