WeakMap은 키가 객체이고 값이 임의의 값일 수 있는 키-값 쌍의 모음입니다. 일반 Map과 달리 WeakMap의 키는 "약하게 참조"됩니다. 즉, 주요 객체에 대한 다른 참조가 없으면 가비지 수집되어 메모리 누수를 방지하는 데 도움이 됩니다.
1. 메모리 관리: 사용하지 않는 키의 가비지 수집을 허용하여 효율적인 메모리 사용에 도움을 줍니다.
2. 개인 데이터: 개체 키가 없으면 데이터에 액세스할 수 없으므로 개체의 개인 데이터를 저장하는 데 사용할 수 있습니다.
3. 메모리 누수 방지: DOM에서 제거될 때 가비지 수집을 방지하지 않고 DOM 요소에 대한 메타데이터를 저장하려는 DOM 조작과 같은 시나리오에 특히 유용합니다.
WeakMap은 WeakMap 생성자를 사용하여 생성됩니다. 사용 방법은 다음과 같습니다.
let weakMap = new WeakMap();
let obj = {}; weakMap.set(obj, 'value associated with obj');
console.log(weakMap.get(obj)); // 'value associated with obj'
console.log(weakMap.has(obj)); // true
weakMap.delete(obj); console.log(weakMap.has(obj)); // false
WeakMap을 사용하여 현재 비밀 은신처에 어떤 슈퍼히어로가 있는지 추적해 보겠습니다. 비밀 은신처는 슈퍼 히어로가 안에 있는 동안에만 슈퍼 히어로에 대한 정보를 보관합니다. 그들이 떠나면 은신처에서는 메모리 과부하를 피하기 위해 그들을 잊어버립니다.
예: 슈퍼 히어로 은신처
let secretHideout = new WeakMap(); function Superhero(name) { this.name = name; } // Superheroes enter the hideout let batman = new Superhero('Batman'); let superman = new Superhero('Superman'); secretHideout.set(batman, 'Batcave'); secretHideout.set(superman, 'Fortress of Solitude'); console.log(secretHideout.get(batman)); // 'Batcave' console.log(secretHideout.get(superman)); // 'Fortress of Solitude' // Batman leaves the hideout batman = null; // No more references to Batman // After garbage collection, the hideout forgets about Batman setTimeout(() => { console.log(secretHideout.get(batman)); // undefined (Batman has been garbage collected) console.log(secretHideout.has(superman)); // true (Superman is still in the hideout) }, 1000);
이 예에서는:
빨리 돌아오지 않으면 안에 누가 있었는지조차 잊어버릴 정도로 비밀스러운 비밀 은신처를 상상해 보세요! 이 예와 마찬가지로 WeakMap은 배트맨이 사라지면 잊어버리고 은신처의 메모리를 깨끗하고 효율적으로 유지합니다.
키는 객체여야 합니다. WeakMap에서는 객체만 키로 사용할 수 있습니다.
반복 불가능: WeakMap은 반복 가능하지 않으므로 for-of와 같은 루프와 함께 사용할 수 없습니다.
가비지 수집: 가장 큰 장점은 가비지 수집기가 프로그램의 다른 곳에서 더 이상 참조되지 않는 키를 정리하여 메모리 누수를 방지할 수 있다는 것입니다.
이렇게 하면 객체를 불필요하게 활성 상태로 유지할 걱정 없이 객체와 관련된 임시 데이터를 저장해야 하는 경우 WeakMap이 특히 유용합니다.
위 내용은 JavaScript의 WeakMap이란 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!