js节流和防抖

js节流和防抖

  • 函数防抖
    当持续触发事件时,一定时间段内没有再触发事件,事件处理函数才会执行一次,如果设定时间到来之前,又触发了事件,就重新开始延时。也就是说当一个用户一直触发这个函数,且每次触发函数的间隔小于既定时间,那么防抖的情况下只会执行一次。
/**
 * @function antiShake 函数防抖
 * @param {Function} fn 需要防抖的函数
 * @param {Number} interval 间隔时间
 * @return {Function} 经过防抖处理的函数
 * */
const antiShake = (fn, interval) => {
    let timer = null; // 定时器
    return () => {
        clearTimeout(timer); //重点: 清除,重新执行
        ...
        // 开启倒计时定时器
        timer = setTimeout(function() {
            ...
        }, interval || 300)
    }
}
  • 函数节流

当持续触发事件时,保证在一定时间内只调用一次事件处理函数,意思就是说,假设一个用户一直触发这个函数,且每次触发小于既定值,函数节流会每隔这个时间调用一次。

/**
 * @function throttle 函数节流
 * @param {Function} fn 需要节流的函数
 * @param {Number} interval 间隔时间
 * @return {Function} 经过节流处理的函数
 * */
function throttle(fn, interval) {
    let timer = null; // 定时器
    let flag = true; // 需要立即执行则加flag,判断是否是第一次执行
    // 利用闭包
    return function() {
        // 第一次执行的话
        if(flag ) {
            ...
            flag = false;
        }
        if(timer) return; // 重点:正在执行直接return
        timer = setTimeout(function() {
            ...
            timer = null; // 清除之前的定时器
        }, interval || 300)
    }
}

区别:
用一句话总结防抖和节流的区别:防抖是将多次执行变为最后一次执行,节流是将多次执行变为每隔一段时间执行。
更多面试题、常用开发技巧、经典题型关注微信小程序“前端无人区”

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值