大佬进阶:你不知道weekSet的场景

186 阅读1分钟

weakSet的弱的意义

image.png 上图阐述的是这个弱的概念,如果这样obj = null ,GC检测机制是会回收你放在weakSet的内容的,因为你定义的是弱引用。

使用场景

// weakSet的使用场景:
// 目的:把ruuning变成私有方法,不允许别的调用,
const weakSet = new WeakSet();
class Person {
  constructor() {
    // 每次调用构造器都会创建一个this然后赋值给对象
    weakSet.add(this);
  }
  running() {
    if (!weakSet.has(this)) throw new Error("私有方法不可调用");
    console.log("running", this);
  }
}
const p = new Person();
p.running();
p.running.call({ name: "hope" });
**//此时想要释放这个对象的内存,直接 p = null 就可以了,weakSet由于是弱引用就直接释放。
//但是如果使用的是 Set 的话,就是强引用,内存就不会释放,还要delete操作**。
p = null;