13

JavaScript(根据标准)在哪里存储闭包:堆还是堆栈?
闭包有第三个明确的地方吗?

4

1 回答 1

10

最后,它是运行时的实现细节。见凤凰链接

至于实现,为了在上下文销毁后存储局部变量,基于栈的实现不再适用(因为它与基于栈的结构的定义相矛盾)。因此在这种情况下,父上下文的封闭数据被保存在动态内存分配中(在“堆”中,即基于堆的实现中),使用垃圾收集器(GC)和引用计数。这样的系统在速度上不如基于堆栈的系统有效。然而,实现可能总是对其进行优化:在解析阶段找出函数中是否使用了自由变量,并根据这个决定——将数据放入堆栈或“堆”中。

于 2013-06-06T11:09:04.600 回答