JS堆栈

筅森魡賤 提交于 2019-12-17 19:37:18

堆&栈

堆是堆内存(heap)的简称,栈是栈内存(stack)的简称。

  • javascript的基本类型都是直接按值存储在栈中的,每种类型的数据占用的内存空间的大小是确定的,并由系统自动分配和自动释放。这样带来的好处就是,内存可以及时得到回收,相对于堆来说,更加容易管理内存空间。
  • javascript中其他类型的数据被称为引用类型的数据 : 如对象(Object)、数组(Array)、函数(Function) …,它们是通过拷贝和new出来的,这样的数据存储于堆中。其实,说存储于堆中,也不太准确,因为,引用类型的数据的地址指针是存储于栈中的,当我们想要访问引用类型的值的时候,需要先从栈中获得对象的地址指针,然后,再通过地址指针找到堆中的所需要的数据。

栈中的基本数据类型

基本数据类型值指保存在栈内存中的简单数据段。访问方式是按值访问。

  1. var name = ‘oralinge’

    在这里插入图片描述

  2. 更改name的值
    name = 123
    在这里插入图片描述
    从1、2中我们可以看出,改变变量的值只操作变量实际保存的值,并不会开辟新的地址。

  3. 基本类型变量的复制
    var b= name;
    在这里插入图片描述
    从一个变量向一个变量复制时,会在栈中创建一个新值,然后把值复制到为新变量分配的位置上。

  4. 更改变量b的值
    b = ‘oralinge’
    与2的原理相同


堆中的引用数据类型

引用数据类型值指保存在堆内存中的对象。也就是,变量中保存的实际上的只是一个指针,这个指针指向内存中的另一个位置,该位置保存着对象。访问方式是按引用访问。

如图示例:

var obj = new Object();
在这里插入图片描述

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!