const debounce = function(fn, delay) {
let timer
return function(...args) {
console.log(timer, 'timer')
if (timer) {
clearTimeout(timer);
}
timer = setTimeout(() => {
fn.apply(this, args);
}, delay)
}
}
在input中输入会触发事件handleSearch
handleSearch() {
function test() {
console.log('test', this)
}
const bnfn = debounce(test, 2000)
bnfn() // 每次事件 没有清空上一次的定时器,相当于timer一直为null
}
你每次 handleSearch 都相当于重新触发了个 const bnfn ,
timer清除 触发clearTimeout是相对于都是同一个bnfn情况下的,就好比说你在handleSearch外部声明了 const bnfn = debounce(test, 2000)
然后每次都调用 同一个 bnfn 就不会为null了 就会清了
你现在是一个块级作用域的问题 你现在相当于每次都重新声明一个函数,每次都相当于只执行一次肯定就会是null清掉
每次进debounce都新设了个timer,往下进不去if(timer),所以说每次都没走清定时器那。把if去掉试试