Loading

节流与防抖

防抖

函数防抖(debounce),触发高频事件后 n 秒内函数只会执行一次,如果 n 秒内高频事件再次被触发,则重新计算时间。计时完成再执行

例如:百度搜索框的联想功能

代码实现

// 简单的例子 
function debounce(fn,wait){
    let timer = null;
    return function(){
        if(timer !== null){
            clearTimeout(timer);
        }
       timer = setTimeout(fn.bind(this,...arguments),wait);//参数的处理
    }
}

var test = debounce(()=>{
    console.log(1)
},1000)
test()
test()
test()//只输出了一次1

节流

限制一个函数在一定时间内只能执行一次。节流是将多次执行变成每隔一段时间执行,先执行,再计时

例如:淘宝的结算购物车的功能

function throttle(fn, delay) {
    let flag = true //用来记录一个函数在一定时间内是否被执行过
    return function () {
        if (!flag) {
            return false //如果是false说明有函数的计时已经开启
        }
        flag = false
        setTimeout(() => {
            fn.call(this,...arguments)//参数的处理
            flag = true //执行之后flag复位
        }, delay)
    }
}

let test = throttle(()=>{
    console.log(1)
},1000)
test()
test()
test()//只输出了一次1

区别

防抖动是将多次执行变为最后一次执行,节流是将多次执行变成每隔一段时间执行。

posted @ 2021-01-17 15:12  不吃苦瓜^  阅读(65)  评论(0编辑  收藏  举报