原始/引用类型是存储在堆上还是堆栈上?

max*_*max 7 javascript

什么决定了JS中的存储类型?它与原始类型与引用类型有什么关系吗?

我来自 C++/python 背景。阅读这个问题的答案和评论,我遇到了一些相互不兼容(甚至内部不一致)的陈述:

接受的答案

  • Primitive values是存储在堆栈上的数据。
  • Primitive value 直接存储在变量访问的位置。
  • Reference values是存储在堆中的对象
  • Reference value 存储在变量 location 中的是指向存储对象的内存位置的指针。

评论来看:

值是存储在堆栈上还是堆上并不由它们在 JS 中的类型决定。它取决于存储它的变量的生命周期(受范围,尤其是闭包的影响,并取决于引擎的分析能力)。

来自投票最高的答案:

JavaScript 没有堆栈或堆。它是一种动态语言,JavaScript 中的所有变量都是动态的。[...] JavaScript 中的所有值(原语和对象)都是从堆中分配的。甚至变量本身也是从堆中分配的。

有人可以澄清或向我推荐技术上正确的解释吗?如果该方法依赖于实现,我会很感激参考实现中的差异。