在 JavaScript 循环中,如何在内存中管理块级分配?

In JavaScript loops, how are block-level allocations managed in memory?

我很好奇 JavaScript 解释器管理像 letconst 这样的块级变量的方式。

假设我有一个循环:

for (let i = 0; i < 100; i++) {
  const square = i * i;
}

isquare 被分配到哪里?

我了解有帧堆栈;每个函数调用都会添加一个新的类似字典的对象来表示函数的词法上下文。当函数退出时,我们递减堆栈指针。这意味着我们可以 运行 函数使用变量而不在堆上产生垃圾。

但是我们的块变量在哪里?我们是否用另一个项目来增加帧堆栈?它们是否 'flattened' 在上下文中但带有特殊标志或符号以将它们与兄弟块中的变量区分开来?

最后,我一般在哪里可以了解 JavaScript 解释器(如 V8)如何管理内存?

这里有一些很棒的堆栈溢出答案,可能会对您有所帮助。
Memory allocation for JavaScript types
How variables are allocated memory in Javascript?
JavaScript variables declare outside or inside loop?
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Memory_Management
当然还有 documentation of V8.
我希望阅读这些可以帮助您更多地了解 javascript 内存管理。