tldr
Объект А будет мусором.
Почему?
Ну, каждый объект в Javascript живет только до тех пор, пока есть ссылка на этот объект. Поскольку в какой-то момент нет ссылки на объект A, он будет удален. Но общий объект, давайте назовем его объектом C, никогда не «принадлежал» объекту A, объект A имел только ссылку на объект C. Поскольку B все еще имеет ссылку на C, C не будет удален.
А как насчет не ссылочных типов?
Хотя ссылочные типы никогда не принадлежат, а существуют как ссылки, примитивные типы принадлежат их родителям.
a = { x: "lorem ipsum" };
b = { y: a.x };
Это означает, что в приведенном выше примере строка «lorem ipsum» дважды сохраняется в памяти. Если объект a удален, то строка тоже. Это не влияет на b, поскольку строка была скопирована по значению, что означает, что она была записана во второй раз в память.
Как среда выполнения узнает, на какой объект ссылаются?
Каждый раз, когда запускается сборщик мусора, он начинает маркировать все объекты, к которым можно обратиться по ссылкам из верхней области видимости. Все, что не было отмечено в этом процессе, будет удалено (в некотором роде, в зависимости от типа запущенного GC).