Закрытие Javascript в куче или стеке?

Где JavaScript (согласно стандарту) хранит замыкания: в куче или в стеке?
Есть ли третье явное место для замыканий?


person Michael Dorner    schedule 06.06.2013    source источник
comment
Возможно, вы захотите взглянуть на этот очень хороший комментарий, чтобы найти ответы.   -  person Phoenix    schedule 06.06.2013


Ответы (1)


В конце концов, это деталь реализации среды выполнения. См. ссылку Phoenix

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

person aggsol    schedule 06.06.2013