일반적인 map

let john = { name: "John" };

let array = [ john ];

john = null; // 참조를 null로 덮어씀

// john을 나타내는 객체는 배열의 요소이기 때문에 가비지 컬렉터의 대상이 되지 않습니다.
// array[0]을 이용하면 해당 객체를 얻는 것도 가능합니다.
alert(JSON.stringify(array[0]));

이런 관점에서 위크맵(WeakMap)은 일반 과 전혀 다른 양상을 보입니다.

위크맵을 사용하면 키로 쓰인 객체가 가비지 컬렉션의 대상이 됩니다.

let john = { name: "John" };

let weakMap = new WeakMap();
weakMap.set(john, "...");

john = null; // 참조를 덮어씀

// john을 나타내는 객체는 이제 메모리에서 지워집니다!

WeapMap이란?

왜 제한적일까?

→ 가비지 컬렉션의 동작 방식 때문!