我有這樣的情況:
class Thing {
constructor() {
this.timer = setInterval(() => console.log('Hi'), 1000);
}
}
let a = new Thing();
// ... various stuff happens which takes less than 1s ...
a = undefined;
問題是, 的a實體在設定為后Thing繼續觸發定時器關閉: aundefined
喜
喜
喜
喜
喜
現在我可以讓父作用域呼叫一個方法來告訴實體停止計時器,但父級實際上并不知道正在使用計時器 - 這是Thing.
如何Thing知道它已被取消參考,以便它可以清理并允許自己被 GC?
uj5u.com熱心網友回復:
您可以使用FinalizationRegistry:
class Thing {
constructor() {
this.timer = setInterval(() => console.log('Hi'), 1000);
}
}
let a = new Thing();
const registry = new FinalizationRegistry(timer => {
clearInterval(timer);
console.log('Cleared');
});
registry.register(a, a.timer);
a = undefined;
請注意,物件被垃圾收集之前可能需要一些時間。在我對上述代碼的測驗中,間隔運行了大約 5-20 次才最終被清除。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/336784.html
標籤:javascript 班级 计时器 垃圾收集
上一篇:如何將類重寫為普通物件?
