Где JavaScript (согласно стандарту) хранит замыкания: в куче или в стеке?
Есть ли третье явное место для замыканий?
Закрытие Javascript в куче или стеке?
Ответы (1)
В конце концов, это деталь реализации среды выполнения. См. ссылку Phoenix
Что касается реализаций, то для хранения локальных переменных после уничтожения контекста реализация на основе стека больше не подходит (поскольку она противоречит определению структуры на основе стека). Поэтому в данном случае закрытые данные родительского контекста сохраняются в динамическом выделении памяти (в «куче», т.е. реализациях на основе кучи), с использованием сборщика мусора (GC) и подсчетом ссылок. Такие системы менее эффективны по скорости, чем системы на основе стека. Однако реализации всегда могут его оптимизировать: на этапе парсинга выяснить, используются ли в функции свободные переменные, и в зависимости от этого принять решение — размещать данные в стеке или в «куче».