关于闭包的问题,每次触发事件后的定时器没有被清空


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去掉试试