ES6 WeakMap的实际用途

由于弱映射的键会对其对应的值建立强引用,因此确保只要弱键仍处于活动状态,插入到弱映射中的值就不会消失,因此不能将其用于备忘表,缓存或其他通常使用弱引用,弱值映射等的内容。

 

var map = new Map(); // maps can have object keys
function useObj(obj){
    doSomethingWith(obj);
    var called = map.get(obj) || 0;
    called++; // called one more time
    if(called > 10) report(); // Report called more than 10 times
    map.set(obj, called);
}

  这会发生内存泄漏,我们现在跟踪传递给该函数的每个库对象,从而垃圾回收不会回收。 

var map = new WeakMap(); // create a weak map
function useObj(obj){
    doSomethingWith(obj);
    var called = map.get(obj) || 0;
    called++; // called one more time
    if(called > 10) report(); // Report called more than 10 times
    map.set(obj, called);
}

  

posted @ 2021-05-25 11:12  远方的少年🐬  阅读(51)  评论(0)    收藏  举报