javascript中栈内存与堆内存如何理解?以及如何区分?

栈内存
栈内存是一种线性数据结构,它遵循先进后出(LIFO, Last In First Out)的原则。栈内存主要用于存储函数调用、局部变量、函数参数以及程序执行的上下文。栈内存的特点包括:

快速访问:由于栈是一种简单的数据结构,访问和操作栈的速度非常快。
有限大小:栈的大小是有限的,当栈空间耗尽时会发生栈溢出(stack overflow)。
自动管理:栈内存中的数据通常在函数执行结束时自动释放。
在 JavaScript 中,原始数据类型(如 Number, String, Boolean, Undefined, Null 和 Symbol)的值直接存储在栈内存中。这意味着原始类型的值是按值访问的,并且在栈内存中直接保存这些值。

let number = 10; // 原始类型的值存储在栈内存中
let string = "Hello"; // 字符串值存储在栈内存中

 

堆内存
堆内存是一大片内存空间,它不像栈内存那样有序。堆内存主要用于存储对象(如数组、函数、类的实例等)。堆内存的特点包括:

动态分配:堆内存可以按需申请空间,并且访问速度比栈内存慢。
手动管理:在一些低级语言中,堆内存需要程序员手动管理。但在 JavaScript 中,垃圾回收机制自动管理堆内存。
持久性:堆内存中的数据可以长时间存在,直到垃圾回收机制判定其不再使用时才会被释放。
在 JavaScript 中,对象的引用存储在栈内存中,而对象本身的数据存储在堆内存中。这意味着,当你声明一个对象时,栈内存中会保存一个指向堆内存中对象的指针。
 

let object = { name: "Alice" }; // 对象的引用存储在栈内存中,对象本身存储在堆内存中

如何区分
原始类型 vs 对象类型:原始类型的值直接存储在栈内存中,而对象类型的引用存储在栈内存中,对象本身的数据存储在堆内存中。
存储方式:栈内存中的数据是按值存储的,堆内存中的数据是按引用存储的。
生命周期:栈内存中的数据通常在函数执行结束后自动释放,而堆内存中的数据则在不再被引用时由垃圾回收机制回收。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值