详细谈谈JS中的内存与变量存储

JS中的内存与变量存储

内存的概念

在JS中,变量都是存储在内存中的。内存是计算机硬件中的一种可读写数据存储器,它用来存储计算机正在运行的程序、运行时所需要的数据以及运行之后产生的结果。在JS中,内存分为堆内存和栈内存两种。

栈内存

栈内存是一种连续的内存空间,可以自动分配和释放,其中存储函数的局部变量、函数参数、函数的返回值、对象的引用等。当函数运行结束或变量失效时,栈内存中的数据也会被自动释放。

堆内存

堆内存也称为动态内存,运行时需要手动进行内存分配和释放。JS中的对象、数组等复杂数据类型均存储在堆内存中。

变量的存储

在JS中,变量的存储分为两种情况。

基本数据类型

JS中的基本数据类型包括:数字(number)、字符串(string)、布尔值(boolean)、空(null)、未定义(undefined)。这些基本数据类型的值存在栈内存中。由于基本数据类型的值大小固定,因此在栈内存中开辟一个固定大小的内存区域来存储。

以下是对于一些基本数据类型的值在栈内存中的存储方式:

var str = 'hello world'; // 字符串存储在栈内存中
var num = 100; // 数字存储在栈内存中
var bool = true; // 布尔值存储在栈内存中
var n = null; // null存储在栈内存中
var und = undefined; // undefined存储在栈内存中

复杂数据类型

JS中的复杂数据类型包括:对象(object)和数组(array)。由于它们所占的内存空间大小不固定,因此存储在堆内存中,并且将它们的引用(reference)存储在栈内存中。

下面是对象和数组在JS中的存储:

var arr = [1,2,3]; // 数组存储在堆内存中,arr存储在栈内存中

var obj = {name:'Tom', age:18}; // 对象存储在堆内存中,obj存储在栈内存中

示例说明

var a = {name:'Tom', age:18};
var b = a;

console.log(a); // {name:'Tom', age:18}
console.log(b); // {name:'Tom', age:18}

b.name = 'Lucy';

console.log(a); // {name:'Lucy', age:18}
console.log(b); // {name:'Lucy', age:18}

在这个示例中,变量a和b存储在栈内存中,它们的值都是一个指向同一个对象的引用。对象{ name: 'Tom', age: 18 }存储在堆内存中,当变量b修改对象的属性时,变量a也会受到影响。

function foo(name, age){
    var a = name;
    var b = age;
}

foo('Tom', 18);

在这个示例中,函数foo中的变量a和b存储在栈内存中,当函数foo执行完毕后,栈内存中的a和b也会被释放。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:详细谈谈JS中的内存与变量存储 - Python技术站

(0)
上一篇 2023年6月11日
下一篇 2023年6月11日

相关文章

  • JavaScript 入门基础知识 想学习js的朋友可以参考下

    JavaScript 入门基础知识 本文将介绍 JavaScript 的基础知识,适合想要入门学习 JavaScript 的朋友参考。包括变量、数据类型、运算符、条件语句、循环语句、函数等基础内容。 变量 变量是存储数据的容器,在 JavaScript 中通过 var、let、const 来声明变量。 // 声明变量并初始化 var name = &quot…

    JavaScript 2023年5月18日
    00
  • javascript下判断一个对象是否具有指定名称的属性的的代码

    要判断一个 JavaScript 对象是否具有指定名称的属性,可以使用 in 或者 hasOwnProperty() 方法。 使用 in 关键字进行属性判断 in 关键字可以用于判断一个对象是否具有指定名称的属性,返回布尔值 true 或 false。 const person = { name: ‘张三’, age: 20 }; // 判断对象是否具有指定…

    JavaScript 2023年5月27日
    00
  • JavaScript对象封装的简单实现方法(3种方法)

    下面将详细讲解“JavaScript对象封装的简单实现方法(3种方法)”的完整攻略。 什么是JavaScript对象封装? JavaScript对象封装是指使用面向对象编程的思想,将数据和方法封装在一起,通过暴露公共方法的方式来实现数据的访问和操作保护。 实现JavaScript对象封装的三种方法 1. 利用构造函数实现对象封装 构造函数是一种用于创建对象的…

    JavaScript 2023年5月27日
    00
  • 解决Django cors跨域问题

    让我来给您详细讲解解决Django CORS跨域问题的完整攻略。 什么是CORS跨域问题? CORS(Cross-Origin Resource Sharing)跨域资源共享问题,是由于同源策略(Same-Origin Policy)限制而导致的。同源策略指的是协议、域名、端口均相同,否则称之为跨域。在Web开发中,跨域问题是一种常见的问题,也是需要解决的问…

    JavaScript 2023年6月11日
    00
  • Document对象内容集合(比较全)

    对于网站开发者而言,了解Document对象内容集合是相当重要的。这个集合包含了许多的内容,例如文档信息、头部信息、body信息、表单信息、链接信息、脚本等等,下面详细讲解一下。 一、Document信息(document信息集合) Document信息集合提供了一堆有关于文档的重要信息,其中包括文档的标题、URL、网页DOM、脚本代码、cookie、use…

    JavaScript 2023年6月11日
    00
  • 使用Microsoft Ajax Minifier减小JavaScript文件大小的方法

    使用 Microsoft Ajax Minifier 可以对 JavaScript 文件进行压缩,进而减小文件大小,加快网站的加载速度。下面是使用 Microsoft Ajax Minifier 减小 JavaScript 文件大小的方法: 步骤一:安装 Microsoft Ajax Minifier 去微软官网下载最新版的 Microsoft Ajax M…

    JavaScript 2023年5月27日
    00
  • asp.net不同页面间数据传递的多种方法

    ASP.NET是一种强大的Web应用程序框架,提供了多种方法来传递不同页面间的数据。下面从多种角度介绍ASP.NET不同页面间数据传递的多种方法: QueryString QueryString是将数据以键值对的形式追加在URL后面,通常用于将简单的数据传递给ASP.NET页面。可采用以下代码将数据传递给页面: <a href="Defaul…

    JavaScript 2023年6月11日
    00
  • 重试,让程序更健壮

    任何通过网络与其它应用通讯地的程序,都应该有足够的灵活性,来应对短暂的临时性故障。因为这些故障很多时候是可以自恢复的。 例如,为了避免服务过载,很多应用会采取某些限流措施,在并发请求达到一定数量时,暂时性的拒绝新的请求加入。这种情况下,尝试使用该应用的程序,一开始可能会被拒绝连接,但下一刻就好了。 因此,在设计系统时,应该考虑到此种故障。并且在条件允许时,加…

    JavaScript 2023年4月17日
    00
合作推广
合作推广
分享本页
返回顶部