首页 > 其他分享 >JS防抖与节流

JS防抖与节流

时间:2022-11-03 19:48:55浏览次数:47  
标签:防抖 handle 节流 timer JS time 执行

1. 概念上的区别

  1. 防抖:多次执行只有最后一次生效,必要参数 [handle, time]
  2. 节流:一段时间内只能执行一次,必要参数 [handle, time]

2. 实现一下

  1. 防抖:
     1 function debounce(handle, time) {
     2     let timer = null;
     3     return function () {
     4         if (timer) {
     5             clearTimeout(timer);
     6             timer = null;
     7         }
     8         timer = setTimeout(() => {
     9             handle();
    10         }, time);
    11     };
    12 }
  2. 节流:
     1 function throttle(handle, time) {
     2     let timer = null;
     3     return function () {
     4         if (!timer) {
     5             handle();
     6             timer = setTimeout(() => {
     7                 clearTimeout(timer);
     8                 timer = null;
     9             }, time);
    10         }
    11     };
    12 } 

3. 进一步描述下

  1. 可以看出来,防抖是每次执行都清除旧的计时器,并且添加新的计时器,所以只有最后一次执行会触发 handle
  2. 而节流是计时器时间到了自动清除旧的计时器,然后才在下一次执行中触发 handle 并且添加新的计时器
  3. 防抖是不断迭代 handle,自然是最后一个 handle 执行;节流是执行完第一个 handle 后,对后面的 handle 进行了屏蔽。一个是把前面 handle 的替换了,一个是把后面的 handle 屏蔽了。

4. 从事件队列的角度深度分析

  1. 防抖是执行了唯一一个被添加到事件队列的 handle,它前面的 handle 随着计时器的移除也都没有进入事件队列,也就不存在进入执行栈了

  2. 节流是 handle 在当前执行栈就直接执行了,后面的 handle 直接被屏蔽掉, 一段时间后继续

  3. 所以,防抖是在下一次执行栈执行,节流是在当前执行栈执行

标签:防抖,handle,节流,timer,JS,time,执行
From: https://www.cnblogs.com/aurora-power/p/16855591.html

相关文章

  • ThreeJS 创建水面报错 /textures/water/Water_1_M_Normal.jpg 404 解决方法
    threeJS创建水面报错 /textures/water/Water_1_M_Normal.jpg404根据路径找不到水面相关图片,原因是npm包中未包含图片,并且图片路径指向当前开发环境的src目录下,解决......
  • Next.js dynamic router All In One
    Next.jsdynamicrouterAllInOnedynamicroutesdemos单层动态路由/pages/post/[pid].jsimport{useRouter}from'next/router'constPost=()=>{co......
  • 居然有单个首字母混淆的JS加密
    老规矩,直接上加密的源代码functiong(A,B,C){varP=L;C(e[A[P(0x1db)]]);}functionh(A,B,C){varQ=L;if(A['key']==Q(0x1eb)&&A[Q(0x1ee)]......
  • vue.js中实现阻止事件冒泡
    当父子元素中都有点击事件的时候,为了让触发子元素中的事件时,不去触发父元素中的事件,可以在子元素事件中添加stop来阻止事件冒泡。 .stop是阻止冒泡行为,不让当前元素的事......
  • js中的闭包
    什么是闭包呢?严格来说要满足四个条件:1.有函数的嵌套2.内部函数引用外部作用域的变量参数3.返回值是函数4.创建一个对象函数,让其长期驻留1functionfa(){2......
  • js中的匿名函数
    什么是匿名函数?顾名思义,就是没有名字的函数例如:function(){console.log(123);}在vscode中会直接提示 Identifierexpected.错误。如果尝试输出的话,在浏览器也会......
  • Python json模块
    一、JSON介绍JSON(JavaScriptObjectNotation)是一种轻量级的数据交换格式,易于人阅读和编写。二、常用方法方法描述json.loads()将JSON字符串转化为Python......
  • app直播源代码,Extjs Grid自动换行
    app直播源代码,ExtjsGrid自动换行定义列的时候加个renderer,例 Js代码      {      header:'序号',      dataIndex:'ind',    ......
  • web服务器15 jsonp格式接口
    概念:浏览器端通过<script>标签的src属性,请求服务器上的数据,同时,服务器返回一个函数的调用。这种请求数据的方式叫做SONP。特点:①JSONP不属于真正的Ajax请求,因为它没有使用......
  • 关于PowerShell Convertto-Json 管道问题
    问题如果一个空数组转成json之后,你期望的是什么?总不能是null吧?如果一个数组内有一个元素,转成json之后,你期望的是什么?总不能不是数组了吧?bug这就是bug啊!很好,查到了h......