zoukankan      html  css  js  c++  java
  • 前端面试—函数防抖与函数节流

    前端面试—函数防抖与函数节流

    博客说明

    文章所涉及的资料来自互联网整理和个人总结,意在于个人学习和经验汇总,如有什么地方侵权,请联系本人删除,谢谢!

    函数防抖(debounce)

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

    简单的说,当一个动作连续触发,则只执行最后一次。

    举例

    打个比方,坐公交,司机需要等最后一个人进入才能关门。每次进入一个人,司机就会多等待几秒再关门。

    应用场景

    连续的事件,只需触发一次回调的场景有:

    • 搜索框搜索输入。只需用户最后一次输入完,再发送请求
    • 手机号、邮箱验证输入检测
    • 窗口大小Resize。只需窗口调整完成后,计算窗口大小。防止重复渲染。
    简单实现

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

    const _.debounce = (func, wait) => {
      let timer;
      return () => {
        clearTimeout(timer);
        timer = setTimeout(func, wait);
      };
    };
    

    函数节流(throttle)

    限制一个函数在一定时间内只能执行一次。

    举例

    乘坐地铁,过闸机时,每个人进入后3秒后门关闭,等待下一个人进入。

    应用场景

    间隔一段时间执行一次回调的场景有:

    • 滚动加载,加载更多或滚到底部监听
    • 谷歌搜索框,搜索联想功能
    • 高频点击提交,表单重复提交
    简单实现

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

    const _.throttle = (func, wait) => {
      let timer;
      return () => {
        if (timer) {
          return;
        }
        timer = setTimeout(() => {
          func();
          timer = null;
        }, wait);
      };
    };
    

    感谢

    浅述函数防抖和函数节流

    以及勤劳的自己,个人博客GitHub

    微信公众号

  • 相关阅读:
    CentOS下NFS服务器安装及配置实例
    appserver安装常见的问题
    java程序链接到sql server数据库
    用C# ASP.net将数据库中的数据表导出到Excel中
    看 《精通CSS》 的读书笔记
    CSS 布局练习
    CSS 学习&测试记录
    兼容 IE6 下Tbody 的 innerHTML 只读无法赋值的问题
    IE6 中 select 隐藏不了的问题
    setInterval、ajax 并用引发的内存漏泄
  • 原文地址:https://www.cnblogs.com/guizimo/p/13711345.html
Copyright © 2011-2022 走看看