我有这个debounce 功能:
const selectElement = document.querySelector('input');
const debounce = (cb, time = 1000) => {
let timer;
return (...args) => {
console.log('run inner function')
if (timer) {
clearTimeout(timer)
}
timer = setTimeout(() => cb(...args), time)
}
}
const onChange = debounce((e) => {
console.log('event', e.target.value)
})
selectElement.addEventListener('input', onChange);
<input input={onChange}/>
代码运行良好,但我想了解返回的函数是如何在debounce
函数中触发的,因为我知道如果一个函数返回另一个函数,我需要像这样调用它:debounce()()
来触发第二个函数,但在我们的例子中,我们在addEventListener
中只触发一次函数debounce()
,但第二个调用是如何发生的?