Функции - это объекты. В стеке вызова вместе с параметрами внутри каждого фрейма записываются указатели на функции, вокруг которых сейчас активно замыкание.
В JS это происходит это без явного указания в коде, какая функция замыкается и какие переменные замкнуты.
Но сборщик мусора когда проходит по стеку, видит, что эти переменные и функции использутся сейчас, и не чистит их