JavaScript中的堆与栈
堆Heap
堆是一种在内存中分配和存储数据的方式。它用于存储引用类型的数据或动态分配的对象。
-
堆的特点:
-
堆内存不是按照顺序存储的,它是乱序分布的;
-
堆容量较大,可以动态分配;
-
在堆中分配内存比栈慢,但不会影响性能。
-
堆的使用场景
-
对象和数组
-
函数的闭包
-
动态分配的对象(如通过构造函数创建的实例)
举例
var person = {
name: 'John',
age: 30
};
解释:
-
person 是一个引用类型,它被分配到堆中存储;
-
对象 person 包含属性 name 和 age。
栈 Stack
栈是一种在内存中分配和存储数据的方式。它用于存储基本类型的值和引用类型的指针。
-
栈的特点:
-
栈内存是按照顺序存储的,每个值占据固定大小的内存空间;
-
栈容量较小,大小有限;
-
在栈中分配和释放内存非常快。
-
栈的使用场景
-
存储基本类型的变量(如数字、字符串、布尔值)
-
函数调用和返回
-
保存局部变量和函数内部的引用
举例
// 声明一个函数
function addNumbers(a, b) {
var sum = a + b
return sum
}
// 调用函数
var result = addNumbers(4, 5)
解释:
- 函数调用过程中,形参 a 和 b 被放入栈中;
- 声明变量 sum 也被放入栈中;
- 在函数返回后,变量 sum 和函数参数从栈中被弹出。
总结:
-
堆用于存储引用类型的数据和动态分配的对象,它是乱序分布的,容量较大;
-
栈用于存储基本类型的值和引用类型的指针,它是按顺序存储的,容量较小。