一文搞懂防抖和节流(代码片段)

工程师-小白 工程师-小白     2022-11-23     211

关键词:

一文搞懂防抖和节流


在了解防抖和节流之前,首先要熟悉闭包的概念,因为防抖和节流函数就是使用闭包写的

闭包

作用域链

Es6新推出了块级作用域的概念,就是大括号里面的变量都是属于这个块级作用域的,也就是说在这个大括号外面是访问不到里面的变量的,里面的变量只能用const或者let来定义,如果是用var是没有块级作用域的概念的,大括号外面也可以访问到变量
作用域链的概念:就是在函数内部是可以访问到全局变量的,函数在寻找变量的时候会顺着作用域链逐渐往上寻找

闭包

闭包就是能够得到其他函数中内部变量的函数,只要把这个函数返回出来就可以了,

本质上:闭包是将函数内部和函数外部连接起来的桥梁

作用:一个是可以读取函数内部的变量,另一个就是让这些变量的值始终保持在内存中

function init() 
    var name = "Mozilla"; // name 是一个被 init 创建的局部变量
    function displayName()  // displayName() 是内部函数,一个闭包
        alert(name); // 使用了父函数中声明的变量
    
    displayName();

防抖

防抖:触发事件一段时间后才执行函数,如果在这段时间内被再次触发,则会重新计时,比如说点击确认键,在点击完成之后第二次不会让立马点击,会间隔一段时间之后才能允许再次点击 主要使用setTimeout和ClearTimeout 防抖函数主要分为两种,一种是延时执行防抖函数,另外一种是立即执行防抖函数

  • 延时执行防抖函数: 类似于电梯门,电梯门不关(一定时间内delay)一直来人,就一直在这等着,一直等到这段时间内 没人了,就管电梯门
function debounce_delay (fn, delay) 
  // 下面这句话只在生命的时候调用一次
  var timer = null //因为下面是返回一个函数,所以在调用这个函数的时候,要定义一个进行接受,这样接收到的就是这个回调函数,所以该条语句只执行一次
  return function () 
    if (timer) 
      clearTimeout(timer)
    
    timer = setTimeout(() => 
      fn()
    , delay)
  

//调用时 
d1.onmousemove = debounce_delay(change, 1000) //不能直接debounce()这样调用,因为 里面return了一个函数,需要接受
  • 立即执行防抖函数: 类似于上电梯最后一个人 这个人一进电梯门 就走了,在电梯升高的这段时间(delay) 来乘坐电梯的其他人 要等到 电梯下来 直到装满(下一次请求到来)才能上去
function debounce_immediately (fn, delay) 
  var timer = null
  return function () 
    if (timer == null) fn()
    else 
      clearTimeout(timer)
    
    timer = setTimeout(() => 
      timer = null
    , delay)
  

防抖和节流(代码片段)

防抖和节流的区别是什么?防抖和节流的实现。防抖和节流的作用都是防止函数多次调用。区别在于,假设一个用户一直触发这个函数,且每次触发函数的间隔小于设置的时间,防抖的情况下只会调用一次,且节流的情况会每隔... 查看详情

ajax基础5--防抖和节流(代码片段)

防抖和节流防抖&节流1.防抖什么是防抖(⭐⭐⭐)防抖的应用场景实现输入框的防抖2.节流什么是节流(⭐⭐⭐)节流的应用场景节流阀的概念3.总结防抖和节流的区别防抖&节流1.防抖什么是防抖(⭐⭐⭐)防抖策略(debounceÿ... 查看详情

防抖和节流(代码片段)

防抖:一定时间内频繁触发一个事件则不会执行对应的操作,只有大于这个时间再次触发才会执行actionfunction_debounce(func,wait)//一上来就执行了,this是windowlettimer=null;letcontext,args;returnfunction()//返回的函数this才是oBoxcontext=this;args=arg... 查看详情

防抖和节流的实现。(代码片段)

防抖functionThrottle(fun,t)lettimeout;//setTimeout的标记,最后清除returnfunction()if(!timeout)timeout=setTimeout(()=>timeout=null,t)fun()//执行函数//<buttonid="element">节流< 查看详情

防抖和节流的实现。(代码片段)

防抖functionThrottle(fun,t)lettimeout;//setTimeout的标记,最后清除returnfunction()if(!timeout)timeout=setTimeout(()=>timeout=null,t)fun()//执行函数//<buttonid="element">节流< 查看详情

防抖和节流原理具体实现(代码片段)

目录防抖节流防抖节流的示例为什么要使用防抖节流浏览器的resize、scroll、keypress、mousemove等事件在触发时,会不断地调用绑定在其事件上的回调函数,会降低前端性能。为了限制回调函数的调用次数,我们可以采用... 查看详情

防抖和节流(代码片段)

防抖任务频繁触发的情况下,只有任务触发的间隔超过指定间隔的时候,任务才会执行。<!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><metaname="viewport"content="width=device-width,initial-scale=1.0,maximum-scal 查看详情

vue防抖和节流(代码片段)

vue没有内置支持防抖和节流,但可以使用Lodash等库来实现。如果某个组件仅使用一次,可以在methods中直接应用防抖:<scriptsrc="https://unpkg.com/lodash@4.17.20/lodash.min.js"></script><script>Vue.cr 查看详情

性能优化——防抖和节流(代码片段)

性能优化——防抖和节流前言在连续触发的事件中,事件处理函数的频繁调用会加重浏览器或服务器的性能负担导致用户体验糟糕,有哪些连续触发的事件呢?比如,浏览器滚动条的滚动事件、浏览器窗口调节的resize事件、输入... 查看详情

源码防抖和节流源码分析(代码片段)

前言防抖、节流主要用于频繁事件触发,例如鼠标移动、改变窗口大小等。lodash等函数库具备相对应的api,_.debounce、_.throttle。核心技术:闭包。区别:防抖,连续触发,第一次和最后一次触发有效节流,一段时间内仅触发一次... 查看详情

前端防抖和节流(代码片段)

目录一、防抖(debounce)非立即执行版:立即执行版:双剑合璧版:二、节流(throttle)1.时间戳版:2.定时器版:双剑合璧版:提示:以下是本篇文章正文内容,下面案例可供参考一、防抖࿰... 查看详情

javascript的防抖和节流(代码片段)

基本概念函数防抖(debounce):触发高频事件后n秒内函数只会执行一次,如果n秒内高频事件再次被触发,则重新计算时间。函数节流(throttle):高频事件触发,但在n秒内只会执行一次,所以节流会稀释函数的... 查看详情

函数防抖和函数节流原理理解(代码片段)

防抖和节流有什么用,一般的使用场景,原理是什么1.作用使用函数节流与函数防抖的目的,就是为了节约计算机资源,提升用户体验。2.场景节流一般是用在必须执行这个动作,但是不能够执行太频繁的情况... 查看详情

前端关于防抖和节流(代码片段)

防抖用户短时间内触发相同的网络请求,我们限制请求次数,减轻服务器之间的压力,就叫防抖举例来说:某购物商城上面搜索框的智能提示,用户输入东西之后,会很快向服务器发送请求,如果监听input事件而不做防抖操作,发送请求频... 查看详情

防抖和节流函数最简版(代码片段)

防抖和节流函数最简版防抖:多次触发事件只执行一次(适用于断续的事件,比如 click、input)1functiondebounce(fn,time)2lettimeout3return()=>4if(timeout)5clearTimeout(timeout)67timeout=setTimeout(8fn9,time)1011节流:在指定时间内多次触发事件只执行一次... 查看详情

javascript的防抖和节流深入理解(代码片段)

基本概念函数防抖(debounce):触发高频事件后n秒内函数只会执行一次,如果n秒内高频事件再次被触发,则重新计算时间。函数节流(throttle):高频事件触发,但在n秒内只会执行一次,所以节流会稀释函数的... 查看详情

☀️七分钟学会手写防抖和节流(代码片段)

前言面试官:来手写一个防抖和节流吧。我:💥…防抖(debounce)防抖,顾名思义,防止抖动,以免把一次事件误认为多次,敲键盘就是一个每天都会接触到的防抖操作。想要了解一个概念,必先了解... 查看详情

函数防抖和节流快速记忆(代码片段)

函数去抖:单位时间内,无论触发多少次只执行一次;这里的时间是短暂的 极端情况下,函数会一直处于等待状态函数去抖常用于防止短时间内重复执行函数 1functiondebounce(func,delay)2//去抖3vartId;4returnfunction()5varcontext=this;6... 查看详情