>웹 프론트엔드 >JS 튜토리얼 >JavaScript의 WeakMap이란 무엇입니까?

JavaScript의 WeakMap이란 무엇입니까?

WBOY
WBOY원래의
2024-07-19 15:32:10868검색

What is a WeakMap in JavaScript?

WeakMap은 키가 객체이고 값이 임의의 값일 수 있는 키-값 쌍의 모음입니다. 일반 Map과 달리 WeakMap의 키는 "약하게 참조"됩니다. 즉, 주요 객체에 대한 다른 참조가 없으면 가비지 수집되어 메모리 누수를 방지하는 데 도움이 됩니다.

왜 WeakMap이 필요한가요?

1. 메모리 관리: 사용하지 않는 키의 가비지 수집을 허용하여 효율적인 메모리 사용에 도움을 줍니다.

2. 개인 데이터: 개체 키가 없으면 데이터에 액세스할 수 없으므로 개체의 개인 데이터를 저장하는 데 사용할 수 있습니다.

3. 메모리 누수 방지: DOM에서 제거될 때 가비지 수집을 방지하지 않고 DOM 요소에 대한 메타데이터를 저장하려는 DOM 조작과 같은 시나리오에 특히 유용합니다.

WeakMap을 어떻게 사용하나요?

WeakMap은 WeakMap 생성자를 사용하여 생성됩니다. 사용 방법은 다음과 같습니다.

  1. WeakMap 만들기:
let weakMap = new WeakMap();
  1. 설정 값:
let obj = {};
weakMap.set(obj, 'value associated with obj');
  1. 가치 얻기:
console.log(weakMap.get(obj)); // 'value associated with obj'
  1. 존재 확인 중:
console.log(weakMap.has(obj)); // true
  1. 값 삭제:
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에 저장합니다.
  • 은신처 떠나기: 배트맨이 은신처를 떠나면(예: batman = null) 배트맨에 대한 언급이 더 이상 없습니다. 가비지 수집은 배트맨을 메모리에서 제거합니다.
  • 은신처 확인: 타임아웃 후 은신처를 확인합니다. 배트맨은 제거(쓰레기 수거)되었지만 슈퍼맨은 여전히 ​​존재합니다.

이게 왜 웃기나요?

빨리 돌아오지 않으면 안에 누가 있었는지조차 잊어버릴 정도로 비밀스러운 비밀 은신처를 상상해 보세요! 이 예와 마찬가지로 WeakMap은 배트맨이 사라지면 잊어버리고 은신처의 메모리를 깨끗하고 효율적으로 유지합니다.

핵심 사항

키는 객체여야 합니다. WeakMap에서는 객체만 키로 사용할 수 있습니다.
반복 불가능: WeakMap은 반복 가능하지 않으므로 for-of와 같은 루프와 함께 사용할 수 없습니다.
가비지 수집: 가장 큰 장점은 가비지 수집기가 프로그램의 다른 곳에서 더 이상 참조되지 않는 키를 정리하여 메모리 누수를 방지할 수 있다는 것입니다.

이렇게 하면 객체를 불필요하게 활성 상태로 유지할 걱정 없이 객체와 관련된 임시 데이터를 저장해야 하는 경우 WeakMap이 특히 유용합니다.

위 내용은 JavaScript의 WeakMap이란 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.