函数的节流与防抖

概念

函数的节流与防抖是优化JavaScript的高频率执行的一种手段。

节流

函数的节流应用于一些函数高频率的场景,多数在监听页面元素一直触发的事件。例如高频率触发的滚动事件。
来看看下面监听滚动事件的例子:

let canRun = true;
document.getElementById('scroll').onscroll = function () {
  if (canRun) return;
  canRun = false;
  setTimeout(function () {
    console.log('do something');
    canRun = true;
  }, 300)
}
  1. 首先定义一个变量(函数运行的开关);
  2. 每次在函数运行的时候检测开关(判断符合运行条件);
  3. 符合条件利用setTimeout运行行数;
  4. 最后,等setTimeout里面的方法执行完毕,把执行条件canRun = true,允许下次执行;

防抖

防抖函数通常运用在表单验证中。在验证的过程中往往是等待用户输入完毕后再进行验证。需要检查格式是否正确。如果不正确在进行错误提示。下面我们还是用滚动的例子来看看:

let timer = false;
document.getElementById('scroll').onscroll = function () {
  clearTimeout(timer);
  timer = setTimeout(function () {
      console.log('do something');
  }, 300)
}
  1. 首先先定义一个标记;
  2. 在执行函数的过程中,先会清理一遍timer;
  3. 然后在定义一个timer;在这里利用setTimeout做一个缓存。
    这里巧妙的利用setTimeout做了一个缓存,每次在运行函数的时候都会清理一遍timer,在利用setTimeout做一个函数缓存。避免了函数的多次运行。其实,用队列的方式也可以做到这种效果。这里就不深入了。
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 如果一个事件频繁触发多次,并且两次事件相隔事件比较短,则防抖函数使得对应的处理事件只触发一次。 ``` funct...
    悲伤逆流成河09阅读 261评论 0 0
  • 长久以来,面向对象在 JavaScript 编程范式中占据着主导地位。不过,最近人们对函数式编程的兴趣正在增长。函...
    神刀阅读 487评论 0 0
  • 大城市的人在羡慕小城的安逸,小城市的人在羡慕大城市的繁华。 我记得前一段时间看过一段新闻,大致是说一对夫妇在深...
    榴莲糖糖阅读 204评论 0 2
  • 了解一个新的领域,其中一个方法就是大量的阅读,进而产生一个基本的认识。 之前研究过推荐系统,机器学习,一路走来也积...
    liuchengxu阅读 762评论 1 10
  • 第三章 想恨你都恨不起来 人其实都不擅长恨别人。每个人的心都是红色的,没有所谓的黑不黑。被说黑,肯定也是在某个触...
    3ba6a32d0443阅读 183评论 0 0