函数防抖与函数节流

函数防抖(debounce)

原理:在事件被触发n秒后再执行回调,如果在这n秒内又被触发,则重新计时。

function debounce(func, delay) {
    var timeout
    return function(){
        clearTimeout(timeout)
        var context = this,
            args = arguments,
            timeout = setTimeout(function(){
                func.apply(context, args)
            }, delay)        
    }
}

函数节流(throttle)

原理: 规定一个单位时间,在这个单位时间内,只能有一次触发事件的回调函数执行,如果在同一个单位时间内某事件被触发多次,只有一次能生效。

function throttle(fn, threshhold) {
 var timeout
 var start = new Date()
 var threshhold = threshhold || 160
 return function () {

 var context = this, args = arguments, curr = new Date() - 0
 
 clearTimeout(timeout)//总是干掉事件回调
 if(curr - start >= threshhold){ 
     fn.apply(context, args) //只执行一部分方法,这些方法是在某个时间段内执行一次
     start = curr
 }else{
 //让方法在脱离事件后也能执行一次
     timeout = setTimeout(function(){
        fn.apply(context, args) 
     }, threshhold);
    }
  }
}

你可能感兴趣的:(函数防抖与函数节流)