Объясните понятия "стек вызовов" (call stack) и "куча" (heap) в JavaScript.
Уровень: Senior
Ответ
Стек вызовов – это структура данных (LIFO), в которой хранится последовательность вызовов функций и контекстов выполнения в процессе работы программы. Когда вызывается новая функция, запись о ней (контекст) помещается наверх стека, а когда функция завершается – запись снимается. Если стек вызовов переполняется (например, из-за бесконечной рекурсии), возникает ошибка \"stack overflow\". Куча (heap) – это большая неструктурированная область памяти, из которой выделяется память под объекты, массивы и другие динамические данные. В JS управлением памятью занимается сборщик мусора, который освобождает память в куче от объектов, на которые нет ссылок. Проще говоря, стек – для контроля порядка выполнения (функции и их локальные переменные), куча – для размещения объектов в памяти.