堆(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
网友评论