InterviewMap / CS-Interview-Knowledge-Map

Build the best interview map. The current content includes JS, network, browser related, performance optimization, security, framework, Git, data structure, algorithm, etc.
https://yuchengkai.cn/docs/frontend/
18.3k stars 2.57k forks source link

debounce示例写法有点欠妥 #194

Open Bjkb opened 5 years ago

Bjkb commented 5 years ago

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