原始类型 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.hqwc.cn/news/205762.html

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

相关文章

服务案例|故障频发的一周,居然睡得更香!

医院运维有多忙? 医院运维,听起来平平无奇毫不惊艳,但其中的含金量,可不是“维持系统正常运行”就能总结的。毕竟医院对业务连续性的超高要求,让运维面对的问题都是暂时的,下一秒可能就有新问题需要发现解…

Vue3 快速上手-基于Vue2基础

Vue3 快速上手-基于Vue2基础 前言Vue3快速上手1.Vue3简介2.Vue3带来了什么1.性能的提升2.源码的升级3.拥抱TypeScript4.新的特性 一、创建Vue3.0工程1.使用 vue-cli 创建2.使用 vite 创建 二、常用 Composition API1.拉开序幕的setup2.ref函数3.reactive函数4.Vue3.0中的响应式…

禁止安装新软件怎么设置(超详细图文介绍)

很多公司的网管向我们反应,总是有员工随意下载软件,并且不去正规网站、正规官网下载,导致公司的电脑总是又卡又慢,网管的工作很难开展。 此时就需要对公司安装软件的情况,进行统一管控了。 方法一:适合个人…

这是基础校园二手交易框架

<!DOCTYPE html> <html lang"en"> <head> <meta charset"UTF-8"> <title>校园二手交易</title> <style> /* Reset stylesheet */ * { margin: 0; padding: 0; box-s…

七牛云产品使用介绍之CDN篇

上一篇介绍了七牛云的Kodo对象存储&#xff0c;并用Java SDK实现将本地文件上传到bucekt&#xff0c;接下来是对CDN产品的介绍 CDN&#xff08;内容分发网络&#xff09;&#xff1a;通过多级缓存实现对Kodo中的资源或者自己网站的资源的加速访问&#xff0c;让你的系统更快更强…

复旦、人大等发布大五人格+MBTI测试 角色扮演AI特质还原率达82.8%

近期&#xff0c;由复旦大学和中国人民大学合作的Chat凉宫春日团队发布了一项关于AI角色扮演的研究。该研究强调了良好的人设还原度对于评价AI角色扮演的重要性&#xff0c;特质还原率高达82.8%。研究使用了大五人格的NEO-FFI问卷和MBTI的16Personalities测试&#xff0c;并通过…

交流充电桩测试参考标准是哪些

功能性能测试&#xff1a;这是评价交流充电桩性能的重要标准&#xff0c;包括充电效率、充电稳定性、充电模式等。充电效率主要检查充电桩的充电功率、充电时间等&#xff1b;充电稳定性主要检查充电桩的电压、电流波动等&#xff1b;充电模式主要检查充电桩的恒流充电、恒压充…

数据集笔记:Pems 自行下载数据+python处理

以下载District 4的各station每5分钟的车速为例 1 PEMS网站下载数据 点击红色的 选择需要的station和区域&#xff0c;点击search&#xff0c;就是对应的数据&#xff0c;点击数据即可下载 &#xff08;这个是station每5分钟的速度数据&#xff09; 2 pems 速度数据 2.1 每一…

Linux系统管理与服务器安全:构建稳健云数据中心

&#x1f482; 个人网站:【 海拥】【神级代码资源网站】【办公神器】&#x1f91f; 基于Web端打造的&#xff1a;&#x1f449;轻量化工具创作平台&#x1f485; 想寻找共同学习交流的小伙伴&#xff0c;请点击【全栈技术交流群】 在当今数字化时代&#xff0c;云数据中心已经成…

今日定音,博通以610亿美元成功收购VMware | 百能云芯

博通&#xff08;Broadcom&#xff09;日前宣布&#xff0c;已获得中国监管机构的批准&#xff0c;将于今日完成对云计算公司VMware的收购交易。这意味着&#xff0c;610亿美元的收购案正式收关。 据悉&#xff0c;中国市场监管总局在11月21日晚发布了有关附加限制性条件批准博…

HT513 I2S输入的音频功放的应用场景

HT513 I2S输入的音频功放的应用场景于&#xff1a;・智N家居 ・智N玩具 ・IoT设备 ・游戏设备・智N音箱 ・其他锂电/5V设备等等。 HT513内部集成了DA转换器&#xff0c;其I2S输入支持32-bit字节&#xff0c;并且可自动监测采样频率&#xff0c;支持192kHz。 HT513集成的D类音…

小雪来袭,安全无忧

今日#小雪# 智安网络提前为你的云保驾护航 让安全成为你的最佳伙伴#智安网络# ​​​