在JavaScript中,原始类型和引用类型存放在哪里?

前端开发 2026-07-09

在JavaScript,特别是V8引擎中,原始类型(基本类型)和引用类型到底存储在哪里?

我见过不同的解释:

  1. 原始类型存放在栈上,引用类型存放在堆上。

  2. 如果一个变量是全局的,它存在于全局对象(GO)上,因此存放在堆上。如果一个变量在函数内部,它存在于激活对象(AO)上,也存放在堆上。(这解释还提到在栈上执行的代码可能为了临时使用而复制原始类型和引用类型...)

哪种解释是正确的?能否帮我澄清一下?

存储是否取决于执行上下文或环境?我有点糊涂,因为我并不完全理解V8如何在内部执行代码。

我一直没能在这个站点、互联网上,甚至通过向AI提问,找到我想要的答案。

解决方案

Everything goes to the heap in JavaScript.

“栈上存放原始类型”的想法来自C++/Java——在JavaScript中并不真正适用。V8通过垃圾回收来管理内存,因此几乎所有东西都驻留在堆上。

唯一的例外: 小整数(Smis)可以内联存储,无需在堆上分配。

站内所有文章版权归属LeftHeroAI导航站,无授权禁止任何主体转载、抄袭、复制内容,亦不得私自架设镜像站点。一经侵权,本站将通过法律途径追责。