函数节流(throttle) 函数防抖(debounce)

JS的函数防抖与节流

  • 搜索框输入文字后的联想。当用户频繁的输入应该在用户最后一次输入完成后进行提醒。这就是防抖(debounce)
  • scroll事件有可能每秒触发50次,但是触发次数太多会消耗性能。让滚动事件每秒最多执行5次,就是节流(throttle)

函数防抖

function debounce(fn, delay = 1000) {
    var timer
    return function () {
        let args = arguments
        let context = this
        clearTimeout(timer)
        timer = setTimeout(() => {
            fn.call(context, args[0].value)
        }, delay);
    }
}

函数节流

时间戳方案

function throttle(fn, delay = 1000) {
   let last = new Date()
    return function () {
        let context = this
        let args  = arguments
        if(new Date() - last >= delay) {
            fn.call(context, args[0].value)
            last = new Date()
        }
    }
}

定时器方案

function throttle2(fn, delay = 1000) {
   let timer = null
    return function () {
        let context = this
        let args  = arguments
        if(timer === null) {
            timer = setTimeout(() => {
                fn.call(context, args[0].value)
                timer = null
            }, delay);
        }
    }
}

问题

节流函数:当用户最后一次操作在delay事件之内,但是与最后一次执行的参数不同,就会有问题。意思就是要求当用户完成最后操作后总要执行一次。

这里使用闭包,会不会引起内存泄漏?
闭包不会造成内存泄漏。程序写错了才会造成内存泄漏。

函数节流的使用场景

  • 懒加载、滚动加载、加载更多或监听滚动条位置;
  • 百度搜索框,搜索联想功能;
  • 防止高频点击提交,防止表单重复提交;
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值