当父对象被销毁时,Javascript的setInterval会被杀死吗?

时间:2017-01-01 00:02:30

标签: javascript node.js

我有一个全局变量 global.loggedInUsers = {};。此对象用作和字典被唯一的key:value对占用。

密钥是唯一的,值是帐户对象。

function Account(hash, jsonData) {
  this.hash = hash;
  this.accountJson = JSON.parse(jsonData);
  this.pongUpdate = 20;
  setInterval(function() {
    // Stuff happens here blah blah
  }, 1000);
}

Account.protoype....

在我的代码中的某个时刻,我最终调用了删除函数

delete(loggedInUsers.key);

因为Account类包含setInterval调用,如果删除了Account对象,setInterval会停止还是我必须将变量中的setInterval存储在析构函数中?

1 个答案:

答案 0 :(得分:4)

setInterval中对该函数的引用已存在,并且由于您未使用clearInterval - 它将继续运行。



var t = 1;
function Account() {
  this.a = setInterval(function() {
    console.log('a ' + t)
    t += 1
  }, 1000);
}

a = new Account();
setTimeout(function() {
  delete(a)
}, 3000)




请注意,在javascript中无法创建Destructor函数,因此,在delete对象后,您需要确保setInterval也已清除:



var t = 1;
Account = function() {
  this.a = setInterval(function() {
    console.log('a ' + t)
    t += 1
  }, 1000);
}
Account.prototype.clear = function() {
  clearInterval(this.a)
}

a = new Account();

setTimeout(function() {
  a.clear()
  delete(a)
}, 3000)