clearTimeout清除掉的定时器不等于Null

 clearTimeout清除掉的定时器不等于null了


如果timer是一个定时器,直接将他log(打印)出来是一个数组编号,他被clearTimeout后再log也是会显示一个编号,typeof(timer)会显示他是"number",因此在立即执行防抖函数中,他可以被设置成开关

function debounce(func,wait) {
  let timeout;
  return function () {
      const context = this;
      const args = [...arguments];

      if (timeout) clearTimeout(timeout); 
//若存在就清除定时器

      const callNow = !timeout;
//清除后的timeout为一个数字编号,所以可以当判断条件
      timeout = setTimeout(() => {
          timeout = null;
//时间到了将其设置为null,然后可以重新触发。
      }, wait)
      if (callNow) func.apply(context, args)
  }
}

第一次触发timeout不存在,为undefind,然后一路顺风。
第二次由于已经设置一个定时器,在定时器没结束的时间内触发时,即使clearTimeout(timeout),timeout不等于null。

将他剖析了解到第一次触发后timeout为7,第二次为12...每次加5,而这个5正好是我设置了五秒。又设置了一个实验

所以猜想定时器一开始是为2,每次增加的数值为设置的秒数。

可以肯定的是clearTimeout清除掉的定时器绝对不等于Null

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值