请教一下nodejs对象释放的问题
"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 实例永远不会被自动回收?
@gvforjob bingo