前端开发之防抖和节流函数 - yuzhouxiaogegit/blog GitHub Wiki

前端开发之防抖和节流函数

【节流函数】一个函数执行一次后,只有大于设定的执行周期后才会执行第二次。往往很多时候我们在提交表单时会出现多次提交的问题。这样会出现异常。

节流函数es5写法:

/*
    节流函数
    @param fn 要被节流的函数
    @param delay 设定的时间
*/
function throttle(fn, delay) {
    var startTime = 0;
    return function () {
        // 记录当前函数触发时间
        var endTime = Date.now();
        if (endTime - startTime > delay) {
            
            //注意this指向问题
            var that = this;
            var argu = arguments;

            fn.call(that,argu);
            // 同步时间
            startTime = endTime;
        }
    }
}
// 调用示例
throttle(function(){
        console.log(555555555)
},5000);

【防抖函数】:一个需要频繁触发的函数,在规定时间内,只能让最后一次生效,前面的不生效

防抖函数es5写法:

 /*
     防抖函数
     @param fn 要被防抖的函数
     @param delay 设定的时间
 */
         
 function debounce(fn, delay) {
     var timer = null;
     return function () {
         // 清理上一次延时器
         clearInterval(timer);
 
         //注意this指向问题
         var that = this;
         var argu = arguments;
 
         // 重新设置新的延时器
         timer = setTimeout(function () {
             fn.call(that,argu);
         }, delay)
     }
 }
 
 // 调用示例
 debounce(function(){
         console.log(555555555)
 },5000);