首页 > 其他分享 >防抖函数 debounce 和节流函数 throttle

防抖函数 debounce 和节流函数 throttle

时间:2024-05-31 20:44:56浏览次数:18  
标签:防抖 throttle 函数 debounce timer return fn

明天考蓝桥web,复习下 debounce 和 throttle

debounce 防抖函数

应用场景:即时响应式的输入框、按钮等(毕竟没人知道用户究竟会怎么用)

前置知识:

闭包:与很多主流编程语言不同,JavaScript 在变量作用域上具有一些特殊表现。(摘自mdn)闭包是由函数以及声明该函数的词法环境组合而成的。该环境包含了这个闭包创建时作用域内的任何局部变量。(话说我还没有探究过为什么)

高阶函数:函数是一等公民,函数接受的参数是函数,返回值同样是一个函数;可以参阅 tapl 对 lambda 表达式的介绍。

this指向

代码编写:

function debounce(fn, delay) {
  let timer = -1;
  return function() { // 如果这个时候用箭头函数...
    if (timer == -1) {
      // 第一次调用立即执行,可以删除
      fn.apply(this, arguments); // 如果不传入 this...
      timer = 0;
      return;
    }
    // 清除以前的池子中的任务
    if (timer) {
      clearTimeout(timer);
    }
    // 把一个新的任务加入池子
    timer = setTimeout(() => { // 如果这个时候不用箭头函数...
      fn.apply(this, arguments);
    }, delay);
  }
}

throttle 节流函数

代码编写:

function throttle(fn, delay) {
  let timer = -1;
  return function() {
    if (timer == -1) {
      fn.apply(this, arguments);
      return;
    }
    if (timer > 0) {
      timer = setTimeout(() => {
        fn.apply(this, arguments);
        clearTimeout(timer);
      }, delay);
    }
  }
}

标签:防抖,throttle,函数,debounce,timer,return,fn
From: https://www.cnblogs.com/sysss-blogs/p/18225200

相关文章

  • 【React】实现一个基本的防抖函数
    函数防抖(debounce),就是指触发事件后,在n秒内函数只能执行一次,如果触发事件后在n秒内又触发了事件,则会重新计算函数延执行时间(在这里和函数节流区分一下,函数节流是在触发完事件之后的一段时间之内不能再次触发事件)。实现:1consttimer=useRef<any>(null)//react中可用方......
  • golang函数使用基础
    函数介绍有其他语言基础的话就没啥介绍的,基本语法:funcfunctionName(形参列别)(返回值列表){执行语句return返回值列表}例子:funcgetSum(n1int,n2int)int{varresint=n1+n2 returnres}包实际就创建不同的文件夹,存放程序文件。Go的每一个文......
  • 立即执行函数IFEE
    //立即执行函数IIFE//声明functionname(a,b){returna+b;}//调用console.log(name(1,2));//立即执行将声明与执行二合一,一步到位//函数声明外部使用一个圆括号括住,使之转为表达式(function(a,b){console.log(a+b);......
  • 箭头函数
    //匿名函数letsum=function(a,b){returna+b;}//只有匿名函数才可以使用胖箭头简化//=>胖箭头sum=(a,b)=>{returna+b;};console.log(sum(1,2));//另外,如果参数大于一个,那么参数的圆括号不能省,直接干脆就别省最后的结......
  • JavaScript执行(三):你知道现在有多少种函数吗?
    在前一篇文章中,我们大致了解了执行上下文是什么,也知道了任何语句的执行都会依赖特定的上下文。一旦上下文被切换,整个语句的效果可能都会发生改变。那么,切换上下文的时机就显得非常重要了。在JavaScript,切换上下文最主要的场景是函数调用。在这一课,我们就来讲讲函数调用切换......
  • 关于一道高斯函数题目
    令\(\lfloorx\rfloor\)为不大于\(x\)的最大整数。\(\{x\}=x-\lfloorx\rfloor\)。题目1题面求值:\[\sum\limits_{i=1}^{2015}\left\{\frac{2015i}{2016}\right\}\]标准答案\[\begin{aligned}&\left\{\frac{2015i}{2016}\right\}\\......
  • Shell阶段07 退出循环指令(示例:分发主机公钥), 函数应用(参数传参)
    退出循环的语句#1.exit退出循环,退出脚本#2.break结束当前循环,或者跳出本地循环,继续执行循环外面的命令#3.continue忽略本次循环剩余的代码,直接执行下一次循环#4.案例先扫描内网网段的所有主机,存活的主机进行发放本机的公钥1.本机是否要有公钥,创建密钥对rm2.......
  • 详解 JS 中的事件循环、宏/微任务、Primise对象、定时器函数,以及其在工作中的应用和注
    为什么会突然想到写这么一个大杂烩的博文呢,必须要从笔者几年前的一次面试说起当时的我年轻气盛,在简历上放了自己的博客地址,而面试官应该是翻了我的博客,好几道面试题都是围绕着我的博文来提问其中一个问题,直接使得空气静止了五分钟,然后面试官结束了这次面试,那就是:如何手写一个简......
  • 函数的参数与返回值
    //必选参数letsum=function(a,b){returna+b;}console.log(sum());//可选参数sum=function(a=1,b=2){returna+b;}console.log(sum());现在计算五个参数相加//常规方法sum=function(a,b,c,d,e){......
  • 机器学习python实践中对于决策函数(decision_function)的一些个人思考
    最近在利用python进行实践训练,但是跟着参考书学习到SVM的时候,示例代码里突然出现了一个函数——decision_function(),让我很懵逼,帮助文档里的英文翻译过来说啥决策函数、ovr、ovo之类的,让我整个人更晕了,因为我在理论部分参考的是周志华老师的《西瓜书》,而《西瓜书》中并没有对这......