堆与栈的概念

50 阅读2分钟

JavaScript中的堆与栈

Heap

堆是一种在内存中分配和存储数据的方式。它用于存储引用类型的数据或动态分配的对象。

  • 堆的特点:

    • 堆内存不是按照顺序存储的,它是乱序分布的;

    • 堆容量较大,可以动态分配;

    • 在堆中分配内存比栈慢,但不会影响性能。

  • 堆的使用场景

    • 对象和数组

    • 函数的闭包

    • 动态分配的对象(如通过构造函数创建的实例)

举例

// 声明一个对象
var person = {
  name: 'John',
  age: 30
};

解释:

  • person 是一个引用类型,它被分配到堆中存储;
  • 对象 person 包含属性 nameage

Stack

栈是一种在内存中分配和存储数据的方式。它用于存储基本类型的值和引用类型的指针。

  • 栈的特点:

    • 栈内存是按照顺序存储的,每个值占据固定大小的内存空间;

    • 栈容量较小,大小有限;

    • 在栈中分配和释放内存非常快。

  • 栈的使用场景

    • 存储基本类型的变量(如数字、字符串、布尔值)

    • 函数调用和返回

    • 保存局部变量和函数内部的引用

举例

// 声明一个函数
function addNumbers(a, b) {
  var sum = a + b;
  return sum;
}

// 调用函数
var result = addNumbers(4, 5);

解释:

  • 函数调用过程中,形参 a 和 b 被放入栈中;
  • 声明变量 sum 也被放入栈中;
  • 在函数返回后,变量 sum 和函数参数从栈中被弹出。

总结:

  • 堆用于存储引用类型的数据和动态分配的对象,它是乱序分布的,容量较大;

  • 栈用于存储基本类型的值和引用类型的指针,它是按顺序存储的,容量较小。