美文网首页
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