美文网首页我爱编程
JS基础稳固堆和栈理解

JS基础稳固堆和栈理解

作者: chasing_dream | 来源:发表于2018-05-20 00:17 被阅读26次

什么是堆和栈?

堆和栈都是运行时内存中分配的一个数据区,因此也被称为堆区和栈区,但二者存储的数据类型和处理速度不同。

在js中的数据结构大致可以分为两种:

  1. 基本类型:Undefined、Null、Boolean、Number 和 String,这5中基本数据类型可以直接访问,他们是按照值进行分配的,存放在栈(stack)内存中的简单数据段,数据大小确定,内存空间大小可以分配。

  2. 引用类型:即存放在堆(heap)内存中的对象,变量实际保存的是一个指针,这个指针指向另一个位置。

stack栈的特点:先进后出,栈内存好比一个有底没有高的盒子,数据线存放在盒子底部;
js的基本数据是不可改变的;改变原始值的唯一途径是覆盖;

传值

从一个向另一个变量复制引用类型的值,复制的其实是指针,因此两个变量最终指向同一个对象。即复制的是栈中的地址而不是堆中的对象。

从一个变量复向另一个变量复制基本类型的值,会创建这个值的副本。

shack的理解

var a =10;  //这一步会在shack中保存一个值10;
var b = a;  //这一步会在shack中复制一份a的值重新保存在一个地方;
a = 15;  //这一步会覆盖第一次保存在shack中的值,与b中的值没有关系
console.log(b);  // 10

heap的理解

var obj1 = {name:'bangbang',age:18};
var b = obj1;
var c = obj1.age;

console.log(b.name); //bangbang
console.log(c);      //18
//改变b和c的值
b.name = 'yanniu';
c = 22;
console.log(obj1.name);     //yanniu
console.log(obj1.age);       //18

以上看出:当我们改变b的数据的时候,我们看到了obj1.name的数据也在改变,但是我们改变c的数据的时候发现,obj1.age的值没有变化,这说明了:b和obj1变量操作的是同一个对象,c和obj1完全独立的。图示如下:


image

相关文章

  • JS基础稳固堆和栈理解

    什么是堆和栈? 堆和栈都是运行时内存中分配的一个数据区,因此也被称为堆区和栈区,但二者存储的数据类型和处理速度不同...

  • JS堆、栈、执行栈和EventLoop

    JS堆、栈、执行栈和EventLoop 堆、栈引用类型在栈中保存指针,在堆中保存对象值 执行栈 JS 代码在运行前...

  • JS 堆和栈

    https://blog.csdn.net/sinat_15951543/article/details/7922...

  • JS 垃圾回收

    内存 JS 数据的存储地址分为栈内存和堆内存。 栈内存 堆内存 在 JS 存放数据的内存中又分为高位和低位,其中高...

  • 关于JS的堆和栈的理解

    一、堆(heap)和栈(stack) 栈(stack)会自动分配内存空间,会自动释放。堆(heap)动态分配的内存...

  • 理解js里堆和栈的意义

    一、 堆(heap)和栈(stack) 栈(stack)会自动分配内存空间,会自动释放。堆(heap)动态分配的内...

  • js/jquery 学习笔记

    理解JavaScript中的堆和栈 这里先说两个概念:1、堆(heap)2、栈(stack)堆是堆内存的简称。栈是...

  • Java大佬之学习历程(一)

    基础篇 JVM: ①JVM内存结构: 堆、栈、方法区、直接内存、堆和栈区别, ②JVM参数及...

  • 堆和栈的理解

    一、预备知识―程序的内存分配 一个由c/C++编译的程序占用的内存分为以下几个部分 1、栈区(stack)― 由编...

  • 《关于栈和堆理解》

    本文仅供自我学习,禁止转载。 Objective-C的对象在内存中是以堆的方式分配内存的,并且堆内存是由你释放的。...

网友评论

    本文标题:JS基础稳固堆和栈理解

    本文链接:https://www.haomeiwen.com/subject/vhqzdftx.html