JS `WeakRef` `Targeting` `FinalizationRegistry` `Callback` 的调度时机与陷阱

大家好,我是你们今天的JS避坑指南针,今天要跟大家聊聊 WeakRef、Targeting、FinalizationRegistry 和 Callback 这四个家伙凑在一起的时候,会发生哪些让人挠头的事情。这几个家伙单独拎出来都挺好理解,但是一旦搅和在一起,就容易出现一些意想不到的状况。 我们今天的目标是:彻底搞清楚它们的调度时机,并且挖出那些潜藏的陷阱,让大家以后遇到类似问题的时候,能够优雅地解决,而不是一脸懵逼地对着屏幕发呆。 第一部分:WeakRef,Targeting,它们究竟是什么玩意儿? 首先,我们来简单回顾一下这几个概念。如果你已经很熟悉了,可以跳过这一部分。 WeakRef (弱引用): 想象一下,你有一个玩具(对象),你不想让这个玩具一直霸占着空间,如果没人玩它了,你就希望垃圾回收器(GC)能把它收走。WeakRef 就像一个“弱鸡”的引用,它不会阻止 GC 回收这个对象。只要指向对象的唯一引用是 WeakRef,那么这个对象就可以被回收。 let target = { name: “我的玩具” }; let weakRef = new WeakRef(target …