JS中的堆栈问题以及影响

堆(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中的堆栈问题以及影响)