您的位置:首页 > Web前端 > JavaScript

javascript的堆栈原理

2018-02-01 15:48 204 查看
首先说明一下Javascript的堆栈概念

堆&栈

两者都是存放临时数据的地方。
栈是先进后出的,就像一个桶,后进去的先出来,它下面本来有的东西要等其他出来之后才能出来。
堆是在程序运行时,而不是在程序编译时,申请某个大小的内存空间。即动态分配内存,对其访问和对一般内存的访问没有区别。对于堆,我们可以随心所欲的进行增加变量和删除变量,不用遵循次序。
栈区(stack) 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。 
堆区(heap) 一般由程序员分配释放,若程序员不释放,程序结束时可能由OS回收。 
堆(数据结构):堆可以被看成是一棵树,如:堆排序; 
栈(数据结构):一种先进后出的数据结构。

数据类型访问&&复制

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

var a=
1;



操作的是变量实际保存的值。

a = 2;



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

var b=
a;



b = 2;



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

vara
=
new
Object();



当操作时,需要先从栈中读取内存地址,然后再延指针找到保存在堆内存中的值再操作。

a.name= 'xz';



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

var b=
a;



b.sex ='boy';



漏画了,差一条指针。b的引用指针也指向object{sex:'boy'}
b.sex; //'boy'a.name;
//'boy'
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: