CS-Interview-Knowledge-Map icon indicating copy to clipboard operation
CS-Interview-Knowledge-Map copied to clipboard

debounce示例写法有点欠妥

Open Bjkb opened this issue 5 years ago • 0 comments

image 测试将immediate置为false,后面的函数变量没有被保存

测试用例:

function testFn(name){
  console.log(`hello ${name}`);
}
var d = debounce(testFn,0,false);
d('xiaomin');
d('xiaohua');
-----> hello xiaomin  // 置为false,应该输出 hello xiaohua

稍加修改

 return function(...params) {
     // 否则缓存参数和调用上下文
     // 更改的地方
     context = this
     args = params
    // 如果没有创建延迟执行函数(later),就创建一个
    if (!timer) {
      timer = later()
      // 如果是立即执行,调用函数
      if (immediate) {
        func.apply(this, params)
      }
    // 如果已有延迟执行函数(later),调用的时候清除原来的并重新设定一个
    // 这样做延迟函数会重新计时
    } else {
      clearTimeout(timer)
      timer = later()
    }
  }

// 测试用例输出 -----> hello xiaohua

Bjkb avatar Jul 20 '19 03:07 Bjkb