函数防抖和节流

基本对比:
函数防抖(debounce) 函数节流(throttle)
基本思想 一些函数不能在没有间断的情况下重复执行,如第一次调用时创建一个计时器在指定时间间隔之后运行代码,不管之前的有没有调用都清除之前的并重新设置一个计时器重新开始计时 一些函数不能在没有间断的情况下重复执行,如第一次调用时创建一个计时器在指定时间间隔之后运行代码,在第二次调用时如果之前的在执行中,则不管;如果已经执行完,则清除之前的并重新设置一个计时器
解释 在一定时间内函数只执行一次,如果该时间段内再次触发则重新开始计时 限制一个函数在一定时间间隔内只执行一次
应用场景 如搜索框输入、滚动加载、窗口大小resize 如联想搜索
函数防抖基本应用
// 函数防抖
var timer = false;
document.getElementById("debounce").onscroll = function(){
    clearTimeout(timer); // 清除未执行的代码,重置回初始化状态

    timer = setTimeout(function(){
        console.log("函数防抖");
    }, 300);
};

函数防抖在执行目标方法时,会等待一段时间。当又执行相同方法时,若前一个定时任务未执行完,则 clear 掉定时任务,重新定时。

函数节流基本应用
// 函数节流
var canRun = true;
document.getElementById("throttle").onscroll = function(){
    if(!canRun){
        // 判断是否已空闲,如果在执行中,则直接return
        return;
    }

    canRun = false;
    setTimeout(function(){
        console.log("函数节流");
        canRun = true;
    }, 300);
};

函数节流是限制函数一段时间内只能执行一次。因此,通过使用定时任务,延时方法执行。在延时的时间内,方法若被触发,则直接退出方法。从而,实现函数一段时间内只执行一次。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 在前端开发的过程中,我们经常会需要绑定一些持续触发的事件,如 resize、scroll、mousemove 等等...
    淘淘笙悦阅读 226,436评论 42 349
  • 本文摘自这里,通俗易懂。防抖和节流在前端和客户端开发中经常会用到,而且适用场景还挺多,大多数成熟的第三方库都有提供...
    nuannuan_nuan阅读 856评论 0 1
  • 一、什么是函数节流 函数节流:是确保函数特定的时间内至多执行一次。 1.函数节流的原理 函数节流的原理挺简单的,当...
    it之承影含光阅读 561评论 2 1
  • 前言:函数防抖和函数节流都是用于优化高频率执行js的一种手段 节流 函数节流:是指一定时间内js方法只跑一次应用场...
    _嗯_哼_阅读 467评论 1 0
  • 众所周知,圣诞节在中国是泊来品,而在你印象中第一次过这个西方节日是什么时候呢? 其实我一直不想提起这个节日的,提起...
    波西米亚的游鱼阅读 674评论 0 0