ES6 WeakMap 을 통 해 메모리 누 출 문 제 를 해결 합 니 다.

3265 단어
지도
1. 정의
맵 대상 은 데이터 구조 사전 과 유사 한 키 쌍 을 저장 합 니 다.전통 적 인 대상 이 문자열 을 키 로 만 사용 할 수 있 는 것 과 달리 Map 대상 은 임의의 값 키 를 사용 할 수 있 습 니 다.
2. 문법
new Map([iterable])

속성
  • size: 키 쌍 의 수량 을 되 돌려 줍 니 다.

  • 조작 방법
  • set (key, value): 키 키 의 값 을 value 로 설정 하고 Map 대상 을 되 돌려 줍 니 다.
  • get (key): 키 키 의 값 을 읽 고 없 으 면 undefined 로 돌아 갑 니 다.
  • has (key): 맵 대상 에 키 쌍 이 있 는 지 판단 하고 true / false 로 돌아 갑 니 다.
  • delete (key): 키 쌍 을 삭제 하고 true / false 로 돌아 갑 니 다.
  • clear (): 맵 대상 의 모든 키 쌍 을 삭제 합 니 다.

  • 옮 겨 다 니 는 방법
  • keys (): 키 이름 의 Iterator 대상 을 되 돌려 줍 니 다.
  • values (): 키 의 Iterator 대상 을 되 돌려 줍 니 다.
  • entries (): 키 값 이 맞 는 Iterator 대상 을 되 돌려 줍 니 다.
  • foreach (value, key, map) = > {}: Map 대상 의 모든 키 값 쌍 을 옮 겨 다 닙 니 다.

  • 3. 예시
    조작 방법
    let m = new Map([
        ['foo', 11],
        ['bar', 22]
    ]);
    m.set('mazey', 322)
        .set('mazey', 413);
    console.log(m); // {"foo" => 11, "bar" => 22, "mazey" => 413}
    console.log(m.has('mazey')); // true
    m.delete('mazey');
    console.log(m.has('mazey')); // false
    m.clear();
    console.log(m); // {}
    

    옮 겨 다 니 는 방법
    let m = new Map([
        ['foo', 11],
        ['bar', 22],
        ['mazey', 413]
    ]);
    console.log(m); // {"foo" => 11, "bar" => 22, "mazey" => 413}
    console.log(m.keys()); // MapIterator {"foo", "bar", "mazey"}
    console.log(m.values()); // MapIterator {11, 22, 413}
    console.log(m.entries()); // MapIterator {"foo" => 11, "bar" => 22, "mazey" => 413}
    m.forEach((value, key, map) => {
        console.log(" :%s, :%s", key, value);
    });
    //  :foo, :11
    //  :bar, :22
    //  :mazey, :413
    

    2. WeakMap
    1. 정의
    WeakMap 대상 은 키 쌍 을 저장 합 니 다. Map 과 달리 키 는 대상 이 어야 합 니 다. 키 는 약 한 참조 이기 때문에 키 대상 이 사라 진 후에 자동 으로 메모 리 를 방출 합 니 다.
    2. 문법
    new WeakMap([iterable])
    

    방법.
  • set (key, value): 키 키 의 값 을 value 로 설정 하고 WeakMap 대상 을 되 돌려 줍 니 다.
  • get (key): 키 키 의 값 을 읽 고 없 으 면 undefined 로 돌아 갑 니 다.
  • has (key): weakMap 대상 에 키 쌍 이 있 는 지 판단 하고 true / false 로 돌아 갑 니 다.
  • delete (key): 키 쌍 을 삭제 하고 true / false 로 돌아 갑 니 다.

  • 주의 하 다.
    위 크 맵 의 특수 한 쓰레기 수 거 메커니즘 때문에 클 리 어 (clear) 방법 이 없다.
    3. 예시
    let obj = {
        foo: 11
    };
    let wm = new WeakMap();
    wm.set(obj, 413322);
    console.log(wm); // {{…} => 413322}
    console.log(wm.has(obj)); // true
    

    3. WeakMap 을 통 해 메모리 누 출 문 제 를 해결 합 니 다.
    Dom 대상 바 인 딩 이 벤트 를 사용 할 때 Dom 대상 이 사라 진 후 메모리 (null 설치) 를 제때에 방출 하지 않 으 면 메모리 에 계속 존재 합 니 다.WeakMap 을 사용 하여 Dom 대상 을 저장 하면 이러한 문제 가 발생 하지 않 습 니 다. Dom 대상 이 사라 지면 JS 의 쓰레기 회수 체 제 는 사용 하 는 메모 리 를 자동 으로 방출 하기 때 문 입 니 다.
    
    
    let wm = new WeakMap();
    let btn = document.querySelector('#btn');
    wm.set(btn, {count: 0});
    btn.addEventListener('click', () => {
        let v = wm.get(btn);
        v.count++;
        console.log(wm.get(btn).count);
    });
    // 1 2 3 4 5...
    
    

    ES6 WeakMap 을 통 해 메모리 누 출 문 제 를 해결 합 니 다.

    좋은 웹페이지 즐겨찾기