js经典面试题堆和栈

108 阅读1分钟

JavaScript 中的堆(Heap)和栈(Stack)是两个关键的内存区域,用于存储不同类型的数据和执行代码。以下是它们的主要特点和用途:

  1. 栈(Stack):
  2. 栈是一种有限的数据结构,遵循后进先出(LIFO)的原则,即最后压入栈的元素最先弹出。
  3. 主要用于存储函数调用时的局部变量、函数参数和返回地址。
  4. 在 JavaScript 中,基本数据类型和引用类型的变量的引用地址(或者说指针)存储在栈内存中。
  5. 堆(Heap):
  6. 堆是一种动态分配的内存区域,用于存储引用类型的数据,如对象和数组。
  7. 数据在堆中是无序存储的,访问需要通过引用(指针)来实现。
  8. 堆内存的分配和释放不由程序的代码控制,而是由垃圾回收机制负责。

在 JavaScript 中,基本数据类型(如数字、字符串、布尔值等)和引用类型(如对象、数组、函数等)的存储方式有所不同:

  • 基本数据类型: 存储在栈内存中,直接按值访问,因为它们的大小固定。
  • 引用类型: 存储在堆内存中,栈中存储的是对应对象在堆中的引用地址。访问引用类型的变量时,首先从栈中获取引用地址,然后再从堆中获取实际的数据。