File tree Expand file tree Collapse file tree 1 file changed +11
-30
lines changed Expand file tree Collapse file tree 1 file changed +11
-30
lines changed Original file line number Diff line number Diff line change @@ -811,39 +811,20 @@ function now() {
811811 * @return  {function}              返回客户调用函数 
812812 */  
813813function  debounce  (func , wait  =  50 , immediate  =  true ) {
814-   let  timer, context, args
815-   
816-   //  延迟执行函数
817-   const  later  =  () =>  setTimeout (() =>  {
818-     //  延迟函数执行完毕,清空缓存的定时器序号
819-     timer =  null 
820-     //  延迟执行的情况下,函数会在延迟函数中执行
821-     //  使用到之前缓存的参数和上下文
822-     if  (! immediate) {
823-       func .apply (context, args)
824-       context =  args =  null 
825-     }
826-   }, wait)
827- 
814+   let  timer =  0 
815+   //  立即执行时,timeout 回调中不做任何事情
816+   const  timeoutFn  =  immediate ?  () =>  {} :  func
828817  //  这里返回的函数是每次实际调用的函数
829818  return  function (... params ) {
830-     //  如果没有创建延迟执行函数(later),就创建一个
831-     if  (! timer) {
832-       timer =  later ()
833-       //  如果是立即执行,调用函数
834-       //  否则缓存参数和调用上下文
835-       if  (immediate) {
836-         func .apply (this , params)
837-       } else  {
838-         context =  this 
839-         args =  params
840-       }
841-     //  如果已有延迟执行函数(later),调用的时候清除原来的并重新设定一个
842-     //  这样做延迟函数会重新计时
843-     } else  {
844-       clearTimeout (timer)
845-       timer =  later ()
819+     //  立即执行
820+     if  (! timer &&  immediate) {
821+       func .apply (this , params)
846822    }
823+     clearTimeout (timer)
824+     timer =  setTimeout (() =>  {
825+       timeoutFn .apply (this , params)
826+       timer =  0 
827+     }, wait)
847828  }
848829}
849830``` 
 
 
   
 
     
   
   
          
    
    
     
    
      
     
     
    You can’t perform that action at this time.
  
 
    
  
    
      
        
     
       
      
     
   
 
    
    
  
 
  
 
     
    
0 commit comments