关于节流函数中定时器id的变化问题
let i = 0
function mouseMove() {
document.querySelector('.box').innerHTML = i++
}
function save(fn, t) {
let timer = null
return function () {
if (!timer) {
timer = setTimeout(function () {
fn()
console.log(timer)
timer = null
}, t)
}
}
}
document.querySelector('.box').addEventListener('mousemove', save(mouseMove, 2000))
试图在setTimeout期间打印了这个定时器
最后在盒子内没有间歇的滑动鼠标,打印出来的timer没有3是为啥? 后面无论我怎么滑动鼠标,打印的数字都是按顺序递增的,很奇怪。而且把打印放在fn前后结果都一样。
setTimeout
的返回值 timeoutID 是一个正整数,表示由 setTimeout() 调用创建的定时器的标识符。可以将这个值传递给 clearTimeout() 来取消该定时器。这个正整数仅表示定时器 ID,不具有其他含义,不一定是 1,2,3……。当然,大部分浏览器使用自增 id 实现。如果在其他地方调用了 setTimeout 可能会导致某个 ID 被其他定时器占有。