JavaScript 变量与堆和栈的关系

JS 八种数据类型

JS 是动态语言,变量可以随时持有任何类型的数据,所以 JS 的变量是没有数据类型的,值才有数据类型。

JS 值有 8 种数据类型:

  • Boolean: true / false
  • Undefined:没有被赋值的变量或变量被提升时的,都会有个默认值 undefined
  • Null:只有一个值 null
  • Number:数字类型
  • BigInt(ES10):可以表示任意大的整数(大于 253 - 1 的整数)
  • String:字符
  • Symbol(ES6):每个从Symbol()返回的symbol值都是唯一的
  • Object:对象类型(Date/Array/Funtion/Set/Map/WeakSet/WeakMap)

栈是内存中一块用于存储局部变量和函数参数的线性结构,遵循着先进后出 (LIFO / Last In First Out) 的原则。ECMAScript为数组专门提供了 push() 和 pop() 方法,以便实现类似栈的行为。

堆数据结构是一种树状结构。它的存取数据的方式与书架和书非常相似。我们只需要知道书的名字就可以直接取出书了,并不需要把上面的书取出来。

在栈中存储不了的数据比如对象就会被存储在堆中,在栈中只是保留了对象在堆中的地址,也就是对象的引用 ,对于这种,我们把它叫做 按引用访问 。

所以

JS 中,基本类型的数据是存放在栈中,引用类型的数据是存放在堆中的。堆中的数据是通过引用和变量关联起来的。

注意

闭包除外,JS 闭包中的变量值并不保存中栈内存中,而是保存在堆内存中

posted @   Mr.曹  阅读(205)  评论(0编辑  收藏  举报
编辑推荐:
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
历史上的今天:
2019-04-16 console 命令进行 JS 调试的灵活用法
点击右上角即可分享
微信分享提示