我试图通过clearTimeout()
摧毁前一个计时器来弄清楚为什么我的简单油门功能无法正常工作。它只是不起作用,只有null
任务让我从这个陷阱...
知道为什么吗?谢谢
码:
const throttler = ({ event, callback, delay, target }) => {
let timerID = null
const eventSubscribeTarget = target || window
const resizeThrottler = () => {
if (timerID) return
timerID = setTimeout(() => {
callback()
timerID = null // <= only by null assigment it's gonna gone...
// clearTimeout(timerID) doesn't work here
}, delay)
}
eventSubscribeTarget.addEventListener(event, resizeThrottler, false)
}
setTimeout()
的结果总是返回Number
。此数字表示已设置的计时器的ID值。将此值与clearTimeout()
方法一起使用可取消计时器。
clearTimeout函数不会重置数字,这就是当你想重用这个变量时你必须将timerID
设置为null
的原因。
https://www.w3schools.com/jsref/met_win_settimeout.asp https://www.w3schools.com/jsref/met_win_cleartimeout.asp
(clearTimeout
- clearInterval
mixup旁边......)这里:
if (timerID) return
因此,将timerId值设置为null将导致此处提前返回,不会设置新的超时。我猜想,正是我们所追求的。
timerID = setTimeout(() => {
callback()
timerID = null // <= only by null assigment it's gonna gone...
// clearTimeout(timerID) doesn't work here
在这里,clearTimeout
不会做任何事情 - 超时已经打勾,回调已被调用,实际上不再需要超时清除。该功能正在此处执行,不会再次执行。如果我们想要阻止设置新的超时,那么这个
timerID = setTimeout(() => {
是无法执行的行。