JS函数防抖(debounce)传参的一些疑问

// 防抖
function debounce (fn, delay) {
    let timer ;

    return function(){
        const context = this
        if (timer) {
            clearTimeout(timer)
        } 
        timer = setTimeout(function() {
            fn.apply(context,arguments)
        }, delay)
    }
}

function handle (a) {
    console.log('handle');
    console.log(a);
}

let timer =  setInterval(
    debounce(handle,1000),
    // () => {
    // debounce(handle,1000)(1)
    // }, 
    200)
setTimeout(function() {
    clearTimeout(timer)
}, 2000)

通过以上防抖函数以及自测执行函数的运行引发了一个疑问,如果我想自定义传参进去,用上述代码注释部分运行是有问题的,是无法起到防抖效果,请问一下是为什么?或者说,我如果想要实现自定义传参应该怎么做?

阅读 10.2k
1 个回答
function debounce (fn, delay) {
    let timer

    return function(){
        const context = this
        const args = arguments  // 存一下传入的参数
        if (timer) {
            clearTimeout(timer)
        } 
        timer = setTimeout(function() {
            fn.apply(context, args)
        }, delay)
    }
}

function handle (a) {
    console.log('handle');
    console.log(a);
}

let debounceHandle = debounce(handle, 1000);

let timer = setInterval(
    debounceHandle,
    // () => { debounceHandle(1) },
    200)

setTimeout(function() {
    clearTimeout(timer)
}, 2000)
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏