­

防抖

函数防抖:短时间多次触发同一事件,只执行 最开始 或 最后 一次操作。

function debounce(func, ms = 1000) {
  let timer;
  return function(...args) {
    console.log(args);
    if (timer) {
      clearTimeout(timer);
    }
    timer = setTimeout(() => {
      func.apply(this, args);
    }, ms);
  };
}
const task = () => {console.log('run task')};
const debounceTask = debounce(task, 1000);
window.addEventListener('click', debounceTask);  // click 可以换成 scroll

 

 

 

对 debounce 函数返回的匿名函数中 args 参数(这里可忽略)的存在作出说明:
  const debounceTask = debounce(task, 1000) 其实返回的是匿名函数。

点击页面触发 window.addEventListener(‘click’, debounceTask) 事件,debounceTask 会执行。

这里 debounceTask 没有传递参数,打印 args 会看到有个事件对象,这里的原因是因为:
  在浏览器中,如果函数执行没有传递参数,会默认有个浏览器事件对象作为参数,如监听的是点击 click 事件的话 args 就是 [PointerEvent]

 

 

 

将 click 换成 scroll,如果在函数不防抖,要执行很多次了~

 

Tags: