js节流与防抖

1.什么是防抖和节流?如何实现?

函数防抖:函数防抖是也优化高频率执行js代码的一种手段可以让被调用的函数在一次连续的高频操作中只被调用一次

作用:减少代码执行次数, 提升网页性能

应用场景:oninput / onmousemove / onscroll / onresize 等事件

function debounce(fn, delay){
    let timer = null
    return function(){
        // 设置了定时器就清空这个定时器,没有就去设置定时器
        timer && clearTimeout(timer)
        // 获取debounce执行作用域的this
        let _this = this
        // 获取参数
        let args = arguments
            
        timer = setTimeout(function(){
            fn.apply(_this, args)
        }, delay)
    }
}

函数节流:函数节流是优化高频率执行js代码的一种手段可以减少高频调用函数的执行次数

作用:减少代码执行次数, 提升网页性能

应用场景:oninput / onmousemove / onscroll / onresize 等事件

function throttle(fn, delay){
    let timer = null
    return function (){
        // 如果已经有定时器了,那么就退出
        if(timer) return
        // 获取debounce执行作用域的this
        let _this = this
        // 获取参数
        let args = arguments
        
        timer = setTimeout(function(){
            // 改变执行函数内部的this指向debounce执行作用域的this,并把参数传给执行函数
            fn.apply(_this, args)
            // 在delay后执行完fn之后清空timer,此时timer为假,throttle触发可以进入计时器
            timer = null
        }, delay)
    }
}

函数节流和函数防抖区别

函数节流是减少连续的高频操作函数执行次数 (例如连续调用10次, 可能只执行3-4次)

函数防抖是让连续的高频操作时函数只执行一次(例如连续调用10次, 但是只会执行1次)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值