一天一个知识点 - 浅谈 JavaScript 堆、栈、队列是什么?都有什么区别?

350 阅读1分钟

前言

前些日子,在掘金上看到一片热门文章《在酷家乐做面试官的日子》。该文作者以面试官的角度,详细阐述了作为一名 web 应聘者应该具有哪些技能,才会更让人青睐。

在对比自身的过程中,发现有一些问题,或许了解,但不全面,这也是本系列文章诞生的缘由。

什么是栈

在前文 一天一个知识点 - 浅谈 JavaScript 的数据类型 有提到过原始类型的存储空间,原始类型包含:

  • Boolean
  • Null
  • Undefined
  • Number
  • String
  • Symbol (ECMAScript 6 新定义)

原型类型都存储在栈内存中,是大小固定并且有序的,遵循 后进先出 (Last-In-First-Out)原则

在生活中,类似整理书籍(最后整理的书,总是在最上面):

什么是堆

JavaScript 的数据类型除了原始类型,还有一类是 Object 类型,它包含:

  • Object
  • Function
  • Array
  • Date
  • RegExp

Object 类型都存储在堆内存中,是大小不定,复杂可变的。

准确来讲的话:

Object 类型数据的 指针 存储在栈内存空间, 指针 实际指向的值存储在堆内存空间

什么是队列

队列与栈内存的存储特性比较像

队列是大小不定并且有序的,遵循 先进先出* (First-In-First-Out)原则

它在生活中,更加类型排队的场景(先排队的人,先吃饭):

参考

系列文章