JS垃圾收集器 - 删除对象时清除计时器

时间:2018-02-20 16:26:57

标签: javascript

我的计时器有问题。我知道如果我设置obj = nul;或删除对象delete obj;,它将从内存中删除。但是如果我的对象有间隔,它就不起作用了。 deleteobj = null;无法正常工作。如何删除定时器而不在删除的对象中执行此操作。

我认为Angular4只清除那些将被删除的组件中的计时器。后台计时器无法删除。

function MyFunc() {
  setInterval(function () {
    console.log('Interval');
  }, 1000);
}

var obj = new(MyFunc.bind({
  message: 'some_message'
}));

// From some time remove object
setTimeout(function() {
  delete obj;
  console.log('Delete object');
}, 5000);

抱歉英语。

1 个答案:

答案 0 :(得分:0)

似乎无法自动执行此操作。您需要手动清除间隔。您可以定义这样的类:

class TimerTask {
  constructor(time){
    this.id = setTimeout(() => this.run(), time);
  }

 run(){ /* override that in subclasses */ }

  clear(){
    clearTimeout(this.id);
  }
}

所以可以这样做:

class Log extends TimerTask {
  run(){
    console.log("done");
  }
}

const test = new Log(1000);

然后有些人:

test = test.clear();