何为函数防抖 --- JS

2019年12月19日,今天在面试笔试中遇到的题目,其实在学习时,就遇到这个词,但当时并没有深刻的去理解,书到用时方恨少。

一、何为函数防抖?

概念:函数防抖(debounce),就是指触发事件后,在n秒内函数只能执行一次,如果触发事件后在n秒内又触发了事件,则会重新计算函数执行时间。

理解重点:一个事件短时间会被多次触发,但需求是在一定时间之后,才执行特定动作

 

二、函数防抖产生的原因

在前端开发过程中,有一些事件,比如,scroll、onresize、mousemove等,会被频繁的触发(就是在短时间内被多次触发),不做限制的话,有可能一秒之内会执行几十次、几百次,如果在这些函数内部又执行了其他函数,尤其是执行了操作DOM的函数(操作DOM的很耗费性能的),这不仅会浪费计算机资源,还会降低程序运行速度,甚至造成浏览器卡死,崩溃等致命问题。

 

三、函数防抖如何解决上述问题

函数防抖的要点,是需要一个setTimeout来实现,延迟运行需要执行的代码。如果方法多次触发,则把上次记录的延迟执行代码用clearTimeout清掉,重新开始计时。若计时期间事件没有被重新触发,等延迟时间计时完毕,则执行目标代码。

 

四、函数防抖的代码实现

function debounce(fn,wait) {

      var timer = null;

      return function() {

            if (timer !== null) {

                 clearTimeout(timer);

            }

           timer = setTimerout(fn,wait);

      }

}

function handle() {

     console.log(Math.random());

}

window.addEventListener("resize",debounce(handle,1000));

 

五、函数防抖的常用场景

一般用在连续的事件只需触发一次回调的场合

1. 搜索框搜索输入,只需要用户最后一次输入完,再发送请求

2.浏览器窗口大小改变后,只需窗口调整完后,再执行resize事件中的代码,防止重复渲染;

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值