浅谈js中的防抖(debounce)与节流(throttle)

在实际应用场景中,我们经常遇见高频调用函数,导致浏览器的消耗,但我们可以根据实际需求使用防抖节流函数。

1.防抖

释义:在限定时间内,只执行一次函数。如果事件再次触发,则重新计时,计时完毕再执行函数。

 //非立即执行版
function debounce(func, wait) {
    let timeout;
    return function (event) {
        // console.log(event)
        let _this = this
        let _args = arguments
        if (timeout) {
            clearTimeout(timeout)
        }
        timeout = setTimeout(() => {
            func.apply(_this, _args)
        }, wait)
    }
}
 //立即执行版,即首先加载一次
 function debounce2(func, wait) {
     let timeout;
     return function (event) {
         // console.log(event)
         let _this = this
         let _args = arguments
         if (timeout) {
             clearTimeout(timeout)
         }
         console.log(timeout)
         let now = !timeout
         timeout = setTimeout(() => {
             timeout = null
         }, wait)
         if (now) func.apply(_this, _args)
     }
 }
2.节流

释义:如果持续触发事件,在一定时间只执行一次函数。

 function throttle(func, wait) {
     let isReady = true
     return function () {
         let _this = this
         let _args = arguments
         if (!isReady) {
             return
         }
         isReady = false
         timeout = setTimeout(() => {
             isReady = true
             func.apply(_this, _args)
         }, wait)
     }
 }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值