关于setInterval的采坑记录

在全局变量中设置的setInerval可以很方便的被建立或删除,但是如果对象的某个属性是计时器,当这个对象被销毁之后,计时器并不会消失。

举个例子:

class Student{
  constructor(name){
    this.name = name;
    this.time = setInterval(this.hello,2000);
  }
  hello = ()=>{
    console.log("hello" + this.name);
  }
};

这里我们新建了一个学生类,学生类有一个叫做hello的方法,我们在类里设定一个计时器,调用hello方法。

我们再新建一个实例

var xiaoming = new Student("ming");

在这之后,计时器生效,开始不断打印。

我们都知道,js中删除一个实例的方法就是把他所对应的变量指向null,比如我们想要删除xiaoming,我们只需要这样即可。

 

xiaoming = null;

js会自动帮我们释放属于xiaoming的空间。但是我们观察到,控制台还在不断输出,本来现在已经没有xiaoming.hello这个方法了,这是为什么呢?

我的理解是setInterval的机制是在setInterval的时候,把大量选中的方法扔到EventLoop里,时间到了就立即执行,即使我们后来把这个方法改了,扔进去的方法也改不掉了。

转载于:https://www.cnblogs.com/TBZW/p/11465386.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值