美文网首页让前端飞
JS中的堆栈问题以及影响

JS中的堆栈问题以及影响

作者: 小鳄鱼的大哥哦 | 来源:发表于2019-03-07 14:42 被阅读17次

堆(heap)

堆 是堆内存的简称。一个混沌,杂乱无章,方便存储和开辟内存空间。

栈(stack)

栈 是栈内存的简称。线性结构,后进先出

堆栈,其实都是一种数据结构而已,主要的问题就是内存的使用和分配了。
各种语言在处理堆栈的原理上都大同小异。堆是动态分配内存,内存大小不一,也不会自动释放(常见的内存溢出问题)。栈是自动分配相对固定大小的内存空间,并由系统自动释放。

JS中的堆栈为题

基本数据类型:基本数据类型值指保存在栈内存中的简单数据段。访问方式是按值访问
JS中的基本类型(值类型): 字符串(String)、数字(Number)、布尔(Boolean)、对空(Null)、未定义(Undefined)、Symbol

var a = 1;
声明变量

修改一下变量

a = 2
修改变量时的内存变化

基本类型变量的复制:从一个变量向一个变量复制时,会在栈中创建一个新值,然后把值复制到为新变量分配的位置上。

var b = a
复制基本类型
b = 2
修改变量b

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

var a = new Object();
顾名思义,引用
a.name= 'xz';
修改变量a

引用类型变量的复制:复制的是存储在栈中的指针,将指针复制到栈中未新变量分配的空间中,而这个指针副本和原指针指向存储在堆中的同一个对象;复制操作结束后,两个变量实际上将引用同一个对象。因此,在使用时,改变其中的一个变量的值,将影响另一个变量

var b= a
引用类型复制

由于引用指针指向同意堆内存地址,所以修改a,也就是修改了堆内存中的object,也会影响到b

a.age = '芳龄18';
console.log(b.age) // 芳龄18

相关文章

  • JS中的堆栈问题以及影响

    堆(heap) 堆 是堆内存的简称。一个混沌,杂乱无章,方便存储和开辟内存空间。 栈(stack) 栈 是栈内存的...

  • 前端线路图

    1 堆栈内存以及闭包作用域 1 js中的基本数据类型以及其区别 (8种) 2 js堆栈内存的运行机制 3 变量提升...

  • js堆栈以及数据类型

    基本数据类型 基本数据类型放在栈中(值不可变,但是可以重新赋值) 基本数据类型的'='是传值 开辟新的栈 基本类型...

  • 借助堆栈理解JS中的数组赋值问题

    首先先看问题 答案很明显:3,10 。 两次的结果都是5,2,3 。出现这种情况的原因是:在定义变量的时候,栈内存...

  • JAVA中的堆栈问题

    Java将内存分为两类- '堆' 和 '栈' . 无论是堆或栈,都是一种数据结构,不过他们有自身的特性. 先说说堆...

  • 通过SourceMap解析RN中的js异常

    RN的js异常,上报的堆栈信息是包含转化后的行号和列号,但是没有具体的js文件信息,这样对于定位js的问题很难,我...

  • js的浅拷贝与深拷贝

    js的浅拷贝与深拷贝 涉及知识点: js中的数据类型(基本类型,引用类型) js中的存储数据的堆栈相关知识点; 下...

  • js实现基础算法以及堆栈实现

    冒泡排序 算法步骤:比较相邻的元素。如果第一个比第二个大,就交换他们两个。对每一对相邻元素作同样的工作,从开始第一...

  • JS 堆栈

    堆是堆内存的简称,栈是栈内存的简称。 堆是动态分配内存,内存大小不一,也不会自动释放。栈是自动分配相对固定大小的内...

  • Java线程堆栈

    线程堆栈信息以及解决的问题 1、线程堆栈的信息都包含: 线程的名字,ID,线程的数量等。 线程的运行状态,锁的状态...

网友评论

    本文标题:JS中的堆栈问题以及影响

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