js的内存

在JS中,每一个数据都需要一个内存空间,内存空间又分为栈内存(stack)与堆内存(heap)和池。池存放常量,所以也叫常量池,一般归类于栈中。

栈的数据结构

栈是一种特殊的列表,栈内的元素只能通过列表的一端访问,这一端称为栈顶。 栈被称为是一种后入先出(LIFO,last-in-first-out)的数据结构


如图,处于盒子中最顶层球 4,它一定是最后被放进去,但可以最先被使用。 而我们想要使用底层的乒乓球 1,就必须将上面的 3 个球取出来,让球1处于盒子顶层。 这就是栈空间先进后出,后进先出的特点。

堆的数据结构

堆是一种经过排序的树形数据结构,每个结点都有一个值。通常我们所说的堆的数据结构,是指二叉堆。堆的特点是根结点的值最小(或最大),且根结点的两个子树也是一个堆。由于堆的这个特性,常用来实现优先队列,堆的存取是随意的,这就如同我们在图书馆的书架上取书,虽然书的摆放是有顺序的,但是我们想取任意一本时不必像栈一样,先取出前面所有的书,我们只需要关心书的名字。

栈内存一般存储原始类型数据

Number  String  Null  Undefined  Boolean  Symbol

例如:

 let num = 1;

我们定义一个变量num,系统自动分配存储空间。我们可以直接操作保存在栈内存空间的值,因此基础数据类型都是按值访问。数据在栈内存中的存储与使用方式类似于数据结构中的堆栈数据结构,遵循 后进先出的原则。

堆内存一般储存引用数据类型

例如:

 let people = {name:'zhangsan',age:18}let arr = [1,2,3]

JS的引用数据类型,比如数组Array,它们值的大小是不固定的。引用数据类型的值是通过 v8 引擎的 map 机制 保存在堆内存中的对象。JavaScript不允许直接访问堆内存中的位置,因此我们不能直接操作对象的堆内存空间。


我们要访问堆内存中的引用数据类型时,实际上我们首先是从栈中获取了该对象的指针,然后再从堆内存中取得我们需要的数据。
所以,我们经常说:基本类型赋值相互不影响,引用类型赋值,会影响原对象。

例如:

 let num = 1;let num1 = num;num1 = 2;console.log(num,num1)  // 1  2  值互不影响let people = {name:'zhangsan',age:18}let other = people;other.age = 20;console.log(people,other);  // {name: 'zhangsan', age: 20} {name: 'zhangsan', age: 20}    影响了原对象

js 的内存,堆和栈相关推荐

  1. (十一)C语言中内存堆和栈的区别

    在计算机领域,堆栈是一个不容忽视的概念,我们编写的C语言程序基本上都要用到.但对于很多的初学着来说,堆栈是一个很模糊的概念. 堆栈:一种数据结构.一个在程序运行时用于存放的地方,这可能是很多初学者的认 ...

  2. java内存堆和栈_java中堆,栈主要区别及内存存储

    java堆.栈.堆栈的区别 1.栈(stack)与堆(heap)都是Java用来在Ram中存放数据的地方.与C++不同,Java自动管理栈和堆,程序员不能直接地设置栈或堆. 2. 栈的优势是,存取速度 ...

  3. java 内存堆和栈_java中堆内存与栈内存的知识点总结

    一.概述 在Java中,内存分为两种,一种是栈内存,另一种就是堆内存. 二.堆内存 1.什么是堆内存? 堆内存是Java内存中的一种,它的作用是用于存储Java中的对象和数组,当我们new一个对象或者 ...

  4. JS中的堆和栈怎么理解?

    JS中其实是没有堆和栈的概念的,但是为了方便我们理解代码的执行过程以及执行方式,我们可以设想这么一个概念: JS把简单的数据类型存放到了栈里,在栈里直接开辟一块空间存放值: 那么复杂数据类型呢? JS ...

  5. js 中堆和栈的应用与理解

    js 中堆和栈的应用与理解 定义 堆内存: 栈内存: 堆和栈在js中的应用 栈: 堆内存 堆和栈有两种 一种是说的数据结构-堆,堆栈 一种是说的内存-堆内存,栈内存 我今天要说的就是堆内存和栈内存 定 ...

  6. python变量存储 堆与栈内存内存_浅析JS中的堆内存与栈内存

    最近跟着组里的大佬面试碰到这么一个问题, Q:说说var.let.const的区别 A:balabalabalabla... Q:const定义的值能改么? A:你逗我?不能吧 不知道各位看官怎么想? ...

  7. js中的堆内存和栈内存

    转自:https://www.cnblogs.com/heioray/p/9487093.html 浅析JS中的堆内存与栈内存 最近跟着组里的大佬面试碰到这么一个问题, Q:说说var.let.con ...

  8. 栈内存 堆内存 (数据类型间的存储区别)

    内存的概念 栈内存 Stack(可以理解为运行内存,如内存条): 所谓栈内存,其实就是在计算机内存中分配出来的一块空间. 用于提供浏览器执行代码的执行环境,以及存储基本类型值. 堆内存 Heap (可 ...

  9. js学习笔记(对象~堆和栈)

    对象 为什么要用对象 让参数更少,代码更简洁 什么是对象 1.现实生活中:万物皆对象,对象是一个具体的事物,一个具体的事物就会有行为和特征.比如:一个人.一部手机 2.类和对象 (1)类:描述一类事物 ...

最新文章

  1. centos 安装 svn
  2. 刚进入win7系统就提示检测到一个硬盘问题的解决方法
  3. mybatis之ResultMap
  4. 17-比赛1 A - Weak in the Middle (栈)
  5. 嵌入式笔录(3)-电容,频率与幅度基础
  6. vue-cli中config目录下的index.js文件详解
  7. windows环境下C语言socket编程
  8. JAVA对MYSQL进行连接、插入、修改、删除操作
  9. Windows10下VB6.0开发——常见控件使用整理
  10. torchtext用法
  11. 镜像电流源特点_MOS管电压型静电击穿特点
  12. MySQL与Oracle 差异比较之五存储过程Function
  13. php爬虫大数据抓取_爬虫软件介绍?大数据抓取软件?
  14. 重温 2020 AI 应用场景,哪个最让你印象深刻?
  15. matlab互相关函数并画图,自相关函数和互相关函数的matlab计算和作图
  16. 主板风扇转不开机是什么问题_电脑主板通电,风扇也转,怎么开不了机,显示屏也没反应...
  17. Qlikview---集合分析
  18. 排卵计算机在线,排卵期(排卵日计算器在线查询)
  19. 路由器:分类、定义及标准
  20. RAKsmart CN2 VPS主机性能评测

热门文章

  1. Google、百度的最本质区别
  2. html5 黑色圆圈,html5 css3圆形百分比加载动画特效
  3. 【转载】解析Caliburn.Micro(一)
  4. [Toddler's Bottle]-[flag]
  5. 圆方那个Android权限,圆方.io游戏_圆方.io安卓版 - 游乐网
  6. Centos7下Php连接Oracle
  7. 了解MD5加密算法原理及其应用
  8. Linux必会100个命令(四十三)useradd和userdel
  9. 考研党特有的错觉,你中了几个?
  10. java四大作用域_java的四大作用域是什么?