请教一下nodejs对象释放的问题
发布于 10 年前 作者 ryanking8215 13958 次浏览 最后一次编辑是 8 年前 来自 问答
 "use strict"

var util = require("util")

var Notifier = function() {
    var self = this
    setInterval(function(){
        console.log("emit")
    },1000)
}

var test = {}

test.n = new Notifier()

setTimeout(function(){
    console.log("quit")
    delete test.n
},5000)

按照我理解,5s后test.n对象被释放,也不会一直输出"emit",但是实际不是的,特此请教

6 回复

IntervalTimer不存在於那個對象裡。釋放這個對象,不會對timer有影響。

delete test.n只是从test的scope中移除对前面那个interval的引用n。真正的interval还存在内存当中。interval对象是这样销毁的:

var ref = setInterval();
clearInterval(ref);

在内存中该对象并未销毁~

delete test.n 只是销毁了n属性链接, 并没有销毁 Notifier 实例, setInterval 持有了这个实例的引用

@fish 那么是不是只要 setInterval ,只要我们不手动 clearInterval ,这个 Interval 实例永远不会被自动回收?

回到顶部