栈内存、堆内存、队列

在学习内存空间之前,我们需要对三种数据结构有一个直观的认知,它们分别是:栈(stack)、堆(heap)与队列(queue)。

一、栈数据结构

JavaScript中并没有严格意义上区分 栈内存堆内存
但是在某些场景,我们仍然需要基于堆栈数据结构的思维来实现一些功能,比如:JavaScript的执行上下文,执行上下文的执行顺序借用了栈数据结构的存取方式。因此理解栈数据结构的原理与特点十分重要。

要简单理解栈的存取方式,我们可以通过类比乒乓球盒子来分析。如下图左侧。

栈内存 - 类比乒乓球盒子 - 先进后出,后进先出

这种乒乓球的存放方式与栈中存取数据的方式如出一辙。处于盒子中最顶层的乒乓球5,它一定是最后被放进去,但可以最先被使用。而我们想要使用底层的乒乓球1,就必须将上面的4个乒乓球取出来,让乒乓球1处于盒子顶层。
这就是栈空间先进后出,后进先出的特点。

二、堆数据结构

堆数据结构是一种树状结构。它的存取数据的方式,则与 书架与书 非常相似。

书虽然也整齐的存放在书架上,但是我们只要知道书的名字,我们就可以很方便的取出我们想要的书,而不用像从乒乓球盒子里取乒乓一样,非得将上面的所有乒乓球拿出来才能取到中间的某一个乒乓球。
好比在JSON格式的数据中,我们存储的key-value是可以无序的,因为顺序的不同并不影响我们的使用,我们只需要关心书的名字。

三、队列

在JavaScript中,理解队列数据结构的目的主要是为了清晰的明白事件循环(Event Loop)的机制到底是怎么回事。
队列是一种先进先出(FIFO)的数据结构。正如排队过安检一样,排在队伍前面的人一定是最先过检的人。用以下的图示可以清楚的理解队列的原理。

队列 - 先进先出 - 过安检

参考资料

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 从三月份找实习到现在,面了一些公司,挂了不少,但最终还是拿到小米、百度、阿里、京东、新浪、CVTE、乐视家的研发岗...
    时芥蓝阅读 42,382评论 11 349
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 173,778评论 25 709
  • 看着校园里面的树从绿变黄,又复苏成了绿色是一件很欣慰又无奈的事。虽然万物复苏了,但我知道时间是永远会不来了。眼看着...
    Amyfliu阅读 336评论 0 0
  • 我躺在这儿有多久了?我并不知道。我也不知道现在是几月了,不知道春夏,甚至分不清白昼,我头顶的灯不曾熄灭过,身后的钟...
    守望海洋的猫阅读 141评论 3 3
  • UINavigationController与UITabBarController整合Demo(纯代码模式) 代码...
    槿灬阅读 1,090评论 0 3