我们会对一些触发频率较高的事件进行监听,(如:resize scroll keyup事件)

如果在回调里执行高性能消耗的操作(如反复操作dom, 发起ajax请求等),反复触发时会使得性能消耗提高,浏览器卡顿,用户使用体验差。

或者我们需要对触发的事件延迟执行回调,此时可以借助throttle/debounce函数来实现需求。

throttle: 节流函数

  在一个时间段内只执行一次

debounce:防抖函数

  连续触发事件的时候,事件监听函数不会立即执行,而是等我们一段时间内不再触发事件的时候,再执行事件监听函数。

throttle函数实现

function throttle (func, wait) {
var lastTime = 0;
return function () {
var time = Date.now();
if (time - lastTime >= wait) {
func();
lastTime = time;
};
};
}; // handler 是事件监听函数
var handler = function () {
console.log('throttle');
}; window.onscroll = throttle(handler, 300);


debounce函数实现

function debounce (func, wait) {
var timer = null;
return function () {
clearTimeout(timer);
timer = setTimeout(func, wait);
};
}; // handler 是事件监听函数
var handler = function () {
console.log('debounce');
}; window.onscroll = debounce(handler, 300);


throttle(节流函数) 与 debounce(防抖动函数)理解与实现的更多相关文章

  1. debounce 防抖动函数

    http://lodash.think2011.net/debounce _.debounce(func, [wait=0], [options]) 创建一个防抖动函数. 该函数会在 wait 毫秒后 ...

  2. [JavaScript] 函数节流(throttle)和函数防抖(debounce)

    js 的函数节流(throttle)和函数防抖(debounce)概述 函数防抖(debounce) 一个事件频繁触发,但是我们不想让他触发的这么频繁,于是我们就设置一个定时器让这个事件在 xxx 秒 ...

  3. 详解防抖函数(debounce)和节流函数(throttle)

    本文转自:https://www.jianshu.com/p/f9f6b637fd6c 闭包的典型应用就是函数防抖和节流,本文详细介绍函数防抖和节流的应用场景和实现. 函数防抖(debounce) 函 ...

  4. 深入理解javascript函数系列第一篇——函数概述

    × 目录 [1]定义 [2]返回值 [3]调用 前面的话 函数对任何一门语言来说都是一个核心的概念.通过函数可以封装任意多条语句,而且可以在任何地方.任何时候调用执行.在javascript里,函数即 ...

  5. 深入理解javascript函数系列第二篇——函数参数

    × 目录 [1]arguments [2]内部属性 [3]函数重载[4]参数传递 前面的话 javascript函数的参数与大多数其他语言的函数的参数有所不同.函数不介意传递进来多少个参数,也不在乎传 ...

  6. 深入理解,函数声明、函数表达式、匿名函数、立即执行函数、window.onload的区别.

    一.函数声明.函数表达式.匿名函数1.函数声明:function fnName () {…};使用function关键字声明一个函数,再指定一个函数名,叫函数声明. 2.函数表达式 var fnNam ...

  7. throttle(节流)和debounce(防抖)

    防抖和节流都是用来控制频繁调用的问题,但是这两种的应用场景是有区别的. throttle(节流) 有一个调用周期,在一个很长的时间里分为多段,每一段执行一次.例如onscroll,resize,500 ...

  8. Python关于函数作为返回值的理解(3分钟就看完了)

    话不多说,直接看例子,上代码: def line_conf(): def line(x): return 2 * x + 1 return line #return a function object ...

  9. js中回调函数(callback)的一些理解

    前言 我个人在学习Node.js相关知识时遇到了回调函数这个概念,虽然之前已经在c,c++等编程语言中用到过它,但还一直未对其机制有深入了解,这次就来好好谈一下它. 概念理解 百度对它的解释是回调函数 ...

随机推荐

  1. java源码 --List、Set、Collection

    List和Set都是接口,它们继承与Collection.List是有序的队列,可以用重复的元素:而Set是数学概念中的集合,不能有重复的元素.List和Set都有它们各自的实现类. 为了方便,我们抽 ...

  2. go map的定义和使用 键值对存储

    定义map    var m map[string]int //定义map 初始化map    m = make(map[string]int) //初始化map 修改map中ok 的值  m[&qu ...

  3. java-TheadPoolExecutor

    Executor的两极调度模型 第一级:java多线程程序把应用分解为若干个任务,然后使用用户级的调度器(Executor框架)将这些任务映射为固定数量的线程: 第二级:操作系统内核将这些线程映射到处 ...

  4. spring-cloud搭建

    1.myApplicaion 启动服务类上层必须有一层包 2.报错 com.sun.jersey.api.client.ClientHandlerException: java.net.Connect ...

  5. (十四)Hibernate中的多表操作(4):单向一对一

    案例一: 注解方式实现一对一 UserBean.java package bean; import java.io.Serializable; import javax.persistence.Col ...

  6. (三)springmvc之注解的基本使用

    一.@Controller @Controller 标记一个类是Controller 二.RequestMapping  地址映射 2.1 Value的操作. 注解在类上面    (父)       ...

  7. C# 整型数和浮点型数的进制转换

    1.十进制转二进制 /// <summary> /// 十进制转二进制 /// </summary> public class Convert10To2 { /// <s ...

  8. findstr 命令使用

    findstr 命令使用 find /? 在文件中搜索字符串. FIND [/V] [/C] [/N] [/I] [/OFF[LINE]] "string" [[drive:][p ...

  9. sqlyog无操作一段时间后重新操作会卡死问题

    在使用 sqlyog 的过程中,遇到了这种情况:打开一个连接,进行了一些操作之后,过一段时间没有操作,然后再来操作会卡死一段时间,等一段时间后操作完成了继续进行其它操作,又很流畅了.但是过一段时间不操 ...

  10. css 关于"浮动边距加倍"及其解决方法-------解决方案是在这个div里面加上display:inline;

    写div代码的时候,经常发现明明宽度算得很准确,但是莫明其妙的会和计划的布局不太一样- -|||开始以为自己代码写的有问题,拼命找bug也一无所获,最后可能会稍微修改样式来达到想要的效果,但终究也是外 ...