美文网首页
函数防抖和函数节流

函数防抖和函数节流

作者: YS909090 | 来源:发表于2019-11-21 16:46 被阅读0次

概念

函数防抖和函数节流的目的都是降低回调执行频率,节约资源,控制函数的执行的次数

函数防抖: 主要应用在事件被频繁的触发情况下,在事件被触发n秒后再执行函数,若n秒内事件被再次触发,则需要重新等待n秒后再执行函数。
函数节流: 主要指在规定的时间内,函数只执行一次。

实现原理

函数防抖

函数防抖实现代码

function debounce(fn, time){
    let timer = null;
    return function(){
        if(timer){
            clearTimeout(timer)
        }
        timer = setTimeout(()=>{
            fn.apply(this)
        }, time)
    }
}

函数防抖主要用于搜索框的实时搜索,以下是搜索框实时搜索函数防抖的简单应用

<!-- html -->
<input id="input" type="text" name="" placeholder="函数防抖" onInput="inputDebounce()">
<!-- js -->
<script>
var inputDebounce = debounce(onInput, 500);
function onInput() {
    // do something
}
</script>

函数防抖通过闭包和延时器实现,debounce函数包含两个参数,fn表示回调执行的函数,time表示延迟的时间,debounce函数定义一个timer变量用来存储延时器,如果函数在time时间内多次触发,则清除延迟器,重新计时。

函数节流

函数节流主要用于滚动事件

function throttle(fn,time){
    let isReady = true;
    return function(){
        if(!isReady){
            return
        }
        isReady = false;
        setTimeout(() => {
            fn.apply(this);
            isReady = true;
        }, time)
    }
}

函数节流的实现方式与函数防抖类似都是通过闭包和延时器实现,不同的点是函数在规定的time时间内只执行一次,如果两次事件触发时间没有超过time,函数会被return,不会执行。且多次触发不需要重新计时

相关文章

网友评论

      本文标题:函数防抖和函数节流

      本文链接:https://www.haomeiwen.com/subject/ubmtwctx.html