JavaScript(根据标准)存储闭包的位置:堆还是堆栈?
关闭是否有第三个明确的位置?
答案 0 :(得分:5)
最后,它是运行时的实现细节。 See Phoenix link
对于实现,为了在销毁上下文之后存储局部变量,基于堆栈的实现不再适合(因为它与基于堆栈的结构的定义相矛盾)。因此,在这种情况下,父上下文的闭合数据被保存在动态存储器分配中(在“堆”中,即基于堆的实现中),使用垃圾收集器(GC)和引用计数。这种系统的速度低于基于堆栈的系统。但是,实现可能总是优化它:在解析阶段找出,是否在函数中使用自由变量,并根据此决定 - 将数据放在堆栈中或“堆”中。