栈、
堆
、 队列
是 js
的三种数据结构
一、栈
先进后出,后进先出。类似水杯里面放石头,先放的沉在底下,后放的压在上面,取石头时,只能先取到后放入的杯中的。
还有比如我们上网使用的浏览器,都有『后退』、『前进』按钮。后退操作,就是把当前正在浏览的页面(栈顶)地址出栈,倒退回之前的地址。我们使用的编辑类的软件,比如 IDE,Word,PhotoShop,他们的撤销(undo)操作,也是用栈来实现的,软件的具体实现代码可能会有比较大的差异,但原理是一样的。
栈内存:存放原始数据类型 以及 引用数据类型的指针 【原始数据类型,引用数据类型的指针
(地址值)】;
二、堆
堆的特点是 无序
的 key-value
键值对
存储方式。堆的存取方式跟 顺序 没有关系,不局限 出入口。
堆内存:存放引用数据类型的值。
为什么有栈内存和堆内存的说法?为了使程序运行时占用内存最小来节约内存,这与Javascript的垃圾回收机制有关。当一个方法执行时,就会建立自己的内存栈,方法里面的变量都会逐渐存入栈里,直到方法执行结束,方法里面的内存栈也会销毁。(闭包是个例外,内存栈销毁了,但是闭包如果用到了内存栈里面的数据,闭包会把数据存下来。所以说: 闭包不能乱用)
三、队列
先进先出,后进后出。类似排队买东西。