// Example 1
let user = {
name: "John"
};
let admin = user;
user
엔 객체 참조 값 저장user
의 값을 다른 값으로 덮어쓰기user = null;
admin
을 통하면 여전히 객체 John에 접근할 수 있기 때문에 John은 메모리에서 삭제되지 아니함. 이 상태에서 admin
을 다른 값(null 등)으로 덮어쓰면 John은 메모리에서 삭제// Example 2
function marry(man, woman) {
woman.husband = man;
man.wife = woman;
return {
father: man,
mother: woman
}
}
let family = marry({
name: "John"
}, {
name: "Ann"
});
함수 marry
는 매개변수로 받은 두 객체를 서로 참조하게 하고, 두 객체를 포함하는 새로운 객체를 반환
참조 삭제
delete family.father;
delete family.mother.husband;
John은 이제 도달 가능한 상태가 아니기 때문에 메모리에서 제거. John에 저장된 데이터(프로퍼티) 역시 메모리에서 사라짐
가비지 컬렉션 후 메모리 구조
"family"
객체와 루트의 연결이 사라지면 루트 객체를 참조하는 것이 아무것도 없게 되어, 섬 전체가 도달할 수 없는 상태가 되고, 섬을 구성하는 객체 전부가 메모리에서 제거family = null;