防抖和节流都是用来控制频繁调用的问题,但是这两种的应用场景是有区别的。

throttle(节流)

有一个调用周期,在一个很长的时间里分为多段,每一段执行一次。例如onscroll,resize,500ms执行一次

// 使用时间差
function throttle (fun, wait) {
let previous = 0 return function (...args) {
let now = Date.now()
let context = this
if (now - previous > wait) {
fun.apply(context, args)
previous = now
}
}
} // 使用定时器
function throttle1 (func, wait) {
let timeout
return function (...args) {
let context = this
if (!timeout) {
timeout = setTimeout(function () {
timeout = null
func.apply(context, args)
}, wait)
}
}
}

debounce(防抖)

在一定时间内不调用,只调用一次。例如input事件,停止输入500ms之后再执行。

function debounce (fun, delay) {
let time = null
return function (...args) {
let ctx = this
clearTimeout(time)
time = setTimeout(function () {
fun.apply(ctx, args)
time = null
}, delay)
}
}

最新文章

  1. MySQL索引原理及慢查询优化
  2. Quartz.net配置文件实例及cron表达式详解
  3. [转]MySQL关键性能监控(QPS/TPS)
  4. JAVA jdbc获取数据库连接
  5. javascrpt 继承
  6. Java魔法类:sun.misc.Unsafe
  7. CentOS6.5下docker的安装及遇到的问题和简单使用
  8. ASP.NET MVC全局观
  9. Android源码及SDK国内镜像下载
  10. mybatis if test加筛选条件
  11. TypeScript--变量及类型的那些事儿
  12. fastjson 的使用总结
  13. 读spring源码(三)-ClassPathXmlApplicationContext-getBean
  14. css实现超出文本省略号的两个方法
  15. 简易解说拉格朗日对偶(Lagrange duality)
  16. gevent模块学习(三)
  17. mybatis缓存的设计
  18. Executors创建的4种线程池的使用
  19. ThreadPoolExecutor 线程池的源码解析
  20. python threading模块使用 以及python多线程操作的实践(使用Queue队列模块)

热门文章

  1. linux性能指标及分析工具
  2. oracle优化脚本
  3. nRF5 SDK for Mesh(六) BLE MESH 的 基础概念
  4. SaltStack 自动化工具
  5. App跳转系统设置界面
  6. C# 自定义特性Attribute
  7. nodejs中npm以及yarn常用指令
  8. ABAP术语-XML
  9. 11.1 js中级,数据类型、数据储存方式、作用域内存空间的区别以及例识别。
  10. jquery购物车添加功能