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

Каждая назначенная переменная, функция или что-то еще проходит этапы жизненного цикла памяти: выделение -> использование -> освобождение

Теперь давайте поговорим, когда мы создаем что-то, где это будет храниться? есть два места для хранения данных: стек и куча. Это две разные структуры данных, которые движок javascript использует для разных целей.

Стек: выделение статической памяти

Стек — это структура данных, которая следует принципу LIFO (последним пришел — первым вышел). В javascript он хранит все наши примитивы (строки, числа, логические значения, undefined и null) и ссылки, указывающие на тип данных объектов и функций.

Поскольку механизм JavaScript знает, что размер не изменится, он будет выделять фиксированный объем памяти для каждого значения.

Процесс выделения памяти непосредственно перед выполнением называется выделением статической памяти.

Куча: динамическое выделение памяти

Куча - это еще одна структура данных, это другое пространство для хранения объектов и функций, когда мы создаем объекты/функции, движок javascript автоматически сохраняет их в памяти кучи, объект и функция являются ссылкой тип данных

В стеке размер выделения памяти фиксирован, но в куче движок javascript не выделяет фиксированный объем памяти для этих объектов. Вместо этого по мере необходимости будет выделяться больше места.

Выделение памяти таким способом также называется динамическим выделением памяти.