Вызывает ли рекурсивный вызов setTimeout утечку памяти замкнутой цепочки?
Нет.После каждого срабатывания таймера подсистема таймера в браузере освобождает свою ссылку на функцию таймера, которая, в свою очередь, освобождает свою ссылку на среду, в которой он был создан, позволяя им обоим восстановиться.
который увеличивается на каждой итерации.В конце концов он достигает максимальной точки (я думаю, что после 35 итераций), когда цепочка, кажется, перестает расти, но мне интересно, просто Chrome просто не отображает ее.Что именно происходит?
Это стандартное управление памятью, все очищается в соответствии с эвристикой движка JavaScript для управления памятью, которая не всегда очищает все заранее.Я подозреваю, что если вы неоднократно нажимали кнопку «Собирать мусор» в devtools (на вкладке «Память»), вы заметили бы, что она возвращается почти к базовой линии.
Одна вещь, которая может помешать возврату к почти базовой линии, этоИзящные асинхронные трассировки стека V8 .Они объявляются как «нулевые затраты», но, конечно, это не может быть полностью истинно, потому что они должны отслеживать информацию асинхронного стека (даже если только в виде строки).