美文网首页
32.ES12-FinalizationRegistry类和We

32.ES12-FinalizationRegistry类和We

作者: 静昕妈妈芦培培 | 来源:发表于2022-03-08 09:13 被阅读0次

FinalizationRegistry类

  • FinalizationRegistry 对象可以让你在对象被垃圾回收时请求一个回调。

FinalizationRegistry 提供了这样的一种方法:

  • 当一个在注册表中注册的对象被回收时,请求在某个时间点上调用一个清理回调。(清理回调有时被称为 finalizer );
  • 你可以通过调用register方法,注册任何你想要清理回调的对象,传入该对象和所含的值;
let obj = {
  name: "why",
};
let info = {
  name: "lily",
};

//创建一个FinalizationRegistry 对象
const registry = new FinalizationRegistry(function (val) {
  //val为使用FinalizationRegistry 对象的register方法注册对象时,传入的第二个参数的值
  if (val === "obj") {
    console.log("obj对象被销毁");
  }
  if (val === "info") {
    console.log("info对象被销毁");
  }
});

//注册对象
registry.register(obj, "obj");
registry.register(info, "info");
obj = null;
info = null;

浏览器执行结果:

info对象被销毁
obj对象被销毁

WeakRef类

  • 如果我们默认将一个对象赋值给另外一个引用,那么这个引用是一个强引用:
  • 如果我们希望是一个弱引用的话,可以使用WeakRef;
let obj = {
  name: "why",
};


//创建一个FinalizationRegistry 对象
const registry = new FinalizationRegistry(function (val) {
  //val为使用FinalizationRegistry 对象的register方法注册对象时,传入的第二个参数的值
    console.log("obj对象被销毁");
});
const foo = new WeakRef(obj);
console.log(foo.deref());

setTimeout(() => {
  console.log(foo.deref());
}, 10000);

obj = null;

非常感谢王红元老师的深入JavaScript高级语法让我学习到很多 JavaScript 的知识

相关文章

网友评论

      本文标题:32.ES12-FinalizationRegistry类和We

      本文链接:https://www.haomeiwen.com/subject/csoclrtx.html