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);
}
};