lixiaojuan12 / Summary-of-code

手写代码爽起来~~~
0 stars 0 forks source link

6. 防抖 #6

Open lixiaojuan12 opened 4 years ago

lixiaojuan12 commented 4 years ago

函数的防抖debounce:不是某个事件触发就去执行函数,而是在指定的时间间隔内,执行一次,减少函数执行的次数。(在一定时间只能只能执行一次)

/*
 * @Parma
 *   func要执行的函数 
 *   wait间隔等待的时间 
 *   immediate在开始边界还是结束边界触发执行(true在开始边界)
 * @return
 *   可被调用的函数
 * by 不要情绪 on 2020/05/24
*/
function debounce(func, wait, immediate) {
     let result = null,
         timeout = null;
    return function (...args) {
        let context = this,
            now = immediate && !timeout;
       clearTimeout(timeout); //重点:在设置新的定时器之前,要把之前设置的定时器都清除,因为防抖的目的是等待时间内,只执行一次
       timeout = setTimeout(() => {
            if (!immediate) result = func.call(context, ...args);
            clearTimeout(timeout);
            timeout = null;
      }, wait);
      if (now) result = func.call(context, ...args);
   }
}