Javascript 在这个问题中是否需要使用clearTimeout()并将超时设置为null?

Javascript 在这个问题中是否需要使用clearTimeout()并将超时设置为null?,javascript,timeout,Javascript,Timeout,我正在经历一个函数“去抖动”的示例(仅在某个时间间隔过后调用它): 我有点困惑,为什么我们需要在这里同时使用clearTimeout()和timeout=null。从我的研究中,我发现clearTimeout()实际上会清除计时器,那么为什么我需要在实际进行函数调用的函数中添加timeout=null?我试着用代码做实验,即使我把timeout=null取出来,它似乎也做了完全相同的事情 注意:clearTimeout()的另一种解释是它会停止函数的运行;这也正确吗?不,不需要它-因为setTi

我正在经历一个函数“去抖动”的示例(仅在某个时间间隔过后调用它):

我有点困惑,为什么我们需要在这里同时使用
clearTimeout()
timeout=null
。从我的研究中,我发现
clearTimeout()
实际上会清除计时器,那么为什么我需要在实际进行函数调用的函数中添加
timeout=null
?我试着用代码做实验,即使我把
timeout=null
取出来,它似乎也做了完全相同的事情


注意:
clearTimeout()
的另一种解释是它会停止函数的运行;这也正确吗?

不,不需要它-因为setTimeout的返回值是一个原语,所以这里不保存任何实质性内容。我建议检查lodash中的
debounce
的实现-虽然显然要复杂得多,但它非常详细地显示了主要机制。@raina77ow啊,好的,他们选择在
functionCall
函数中也包含
timer=null
有什么原因/好处吗?如果不知道“他们”是谁,很难说清楚。:)可能最初的实现对
timeout
值进行了一些检查,如果clearTimeout为null,则没有调用它来优化这个值
Function.prototype.myDebounce = function(interval) {
  let timeout;
  return (...args) => {
    const functionCall = () => {
      timeout = null;
      this(...args);
    };
    clearTimeout(timeout);
    timeout = setTimeout(functionCall, interval);
  }
};