js防抖和节流

本文介绍了JavaScript中防抖(debounce)和节流(throttle)的概念与实现方法,这两种技术常用于优化窗口事件监听,如滚动、搜索联想、窗口resize等场景,以降低浏览器和服务器的负担。防抖通过限制事件处理函数的执行次数,确保在无新触发的情况下执行;节流则保证在固定时间内只执行一次事件处理函数。
摘要由CSDN通过智能技术生成

前言

       当我们进行窗口或者滚动等事件监听时,会高频率触发事件,加重浏览器和服务器的负担,此时我们就可以用防抖(debounce)和节流(throttle)的方式来减少调用评率,同时又不影响实际效果

一、防抖函数

        函数防抖(debounce):当持续触发事件时,一定时间段内没有再触发事件,事件处理函数才会执行一次,如果设定的时间到来之前,又一次触发了事件,就重新开始延时

        实现:1.定义一个全局的变量储存定时器ID

                   2.在每次执行函数事件前,将定时器清除,然后在开始本次定时器

/**
 * 防抖
 * @param {function} fn
 * @param {number} delay
 */
function debounce(fn, delay) {
  let times = null
  return function () {
    clearTimeout(times)
    times = setTimeout(() => {
      fn.apply(this, arguments)
    }, delay) //利用闭包可用访问外部元素times
  }
}

window.onscroll = debounce(function () {
  console.log("调用了一次")
}, 500)

二、节流函数

        函数节流(throttle):当持续触发事件时,保证一定时间段内只调用一次事件处理函数

   

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值