Вопрос проверяет понимание механизма хранения объектов в памяти JavaScript, включая ссылочную модель и работу сборщика мусора.
В JavaScript объекты не хранятся непосредственно в переменных. Вместо этого переменная содержит ссылку (указатель) на область памяти в куче (heap), где фактически размещены данные объекта. Это фундаментальное отличие от примитивных типов (числа, строки, булевы значения), которые хранятся в стеке (stack) и копируются по значению.
Когда вы создаете объект, движок JavaScript выделяет память в куче и возвращает ссылку на этот участок. При присваивании объекта другой переменной копируется именно ссылка, а не сам объект. Это означает, что изменение объекта через одну переменную отражается на всех переменных, указывающих на тот же объект.
let obj1 = { name: 'Alice' };
let obj2 = obj1; // копируется ссылка
obj2.name = 'Bob';
console.log(obj1.name); // 'Bob' — объект измененJavaScript использует автоматический сборщик мусора (garbage collector), который отслеживает объекты, на которые больше нет ссылок, и освобождает занимаемую ими память. Основной алгоритм — mark-and-sweep: сборщик помечает достижимые объекты, начиная с корневых (глобальный объект, локальные переменные), затем удаляет недостижимые.
let user = { name: 'Alice' };
user = null; // объект становится недостижимым, память освободится при следующем цикле GClet a = { value: 1 };
let b = { value: 1 };
console.log(a === b); // false — разные ссылки
function mutate(obj) {
obj.value = 2;
}
mutate(a);
console.log(a.value); // 2Вывод: Понимание ссылочной модели объектов критично для избежания неожиданных мутаций и утечек памяти. Это знание необходимо при работе с любыми структурами данных, передаче объектов между функциями и оптимизации производительности приложений.
Frontend developer
Ментор по Frontend
Полное сопровождение до оффера — без дорогих курсов, с оплатой после трудоустройства
Записаться на консультацию