千家信息网

怎么理解javascript中防抖和节流

发表于:2026-11-04 作者:千家信息网编辑
千家信息网最后更新 2026年11月04日,本篇内容介绍了"怎么理解javascript中防抖和节流"的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成
千家信息网最后更新 2026年11月04日怎么理解javascript中防抖和节流

本篇内容介绍了"怎么理解javascript中防抖和节流"的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

在javascript中,防抖是指触发高频事件后n秒内函数只会执行一次,如果n秒内高频事件再次被触发,则重新计算时间;节流是指当持续触发事件时,保证一定时间段内只调用一次事件处理函数。

本教程操作环境:windows7系统、javascript1.8.5版、Dell G3电脑。

一、防抖

触发高频事件后n秒内函数只会执行一次,如果n秒内高频事件再次被触发,则重新计算时间

  • 思路:
    动作绑定事件,动作发生后一定时间后触发事件,在这段时间内,如果该动作又发生,则重新等待一定时间再触发事件。

function debounce(fn) {      let timeout = null; // 创建一个标记用来存放定时器的返回值      return function () {        clearTimeout(timeout);         // 每当用户输入的时候把前一个 setTimeout clear 掉        timeout = setTimeout(() => {         // 然后又创建一个新的 setTimeout, 这样就能保证输入字符后的 interval 间隔内        // 如果还有字符输入的话,就不会执行 fn 函数          fn.apply(this, arguments);          //因为sayHi函数是在全局中运行,this默认指向了window          //所以要用apply将inp的this传入        }, 500);      };    }    function sayHi() {      console.log('防抖成功');    }    var inp = document.getElementById('inp');    inp.addEventListener('input', debounce(sayHi)); // 防抖

举个例子,假如你有一个需求是用户在input框中输入一串字符后,自动发一个ajax请求,如果不做防抖,则用户每次改变字符串(删掉字符或输入新字符)都会发送一次请求,但是如果做防抖处理,当用户输入一个字符后,过了0.5秒也没有改变字符串(这大概率表示用户已经完成字符串输入),则发送请求,如果在0.5秒内改变了字符串(这大概率表示当前字符串不是用户要输入的最终字符串),则暂不发送请求,继续重新计算0.5秒,直到用户停顿超过了0.5秒,再发送请求。

二、节流

当持续触发事件时,保证一定时间段内只调用一次事件处理函数。所以节流会稀释函数的执行频率

  • 思路:
    动作绑定事件,动作发生后一段时间后触发事件,在这段时间内,如果动作又发生,则无视该动作,直到事件执行完后,才能重新触发。

function throttle(fn) {      let canRun = true; // 通过闭包保存一个标记      return function () {        if (!canRun) return; // 在函数开头判断标记是否为true,不为true则return        canRun = false; // 立即设置为false        setTimeout(() => { // 将外部传入的函数的执行放在setTimeout中          fn.apply(this, arguments);          // 最后在setTimeout执行完毕后再把标记设置为true(关键)表示可以执行下一次          //循环了。当定时器没有执行的时候标记永远是false,在开头被return掉          canRun = true;        }, 500);      };    }    function sayHi(e) {      console.log(e.target.innerWidth, e.target.innerHeight);    }    window.addEventListener('resize', throttle(sayHi));

三、结合应用场景

debounce(防抖)

  • search搜索联想,用户在不断输入值时,用防抖来节约请求资源。

  • window触发resize的时候,不断的调整浏览器窗口大小会不断的触发这个事件,用防抖来让其只触发一次

. throttle(节流)

  • 鼠标不断点击触发,mousedown(单位时间内只触发一次)

  • 监听滚动事件,比如是否滑到底部自动加载更多,用throttle来判断

"怎么理解javascript中防抖和节流"的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注网站,小编将为大家输出更多高质量的实用文章!

事件 字符 时间 函数 输入 用户 动作 字符串 标记 不断 时候 更多 保证 处理 内容 再次 定时器 开头 思路 时间段 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 互联网核心科技是什么 科技企业和互联网企业 广州互联网科技公司 奇酷互联网科技 易通互联网络科技有限公司 菲比寻常互联网科技 北京华百购互联网科技有限公司 移动互联网科技股 恒生互联网科技指数跳水 深圳市优智互联网科技有限公司 中国互联网公司排名锤子科技 国大互联网教育科技有限公司薪资 有人说阿里系是互联网科技企业 卡尔迅互联网科技有限公司 互联网风格科技公司名称 西安有哪些互联网高科技企业 北京互联网科技类企业分布 三亚科技创新互联网基地 六子台科技互联网展会 前海云享互联网科技 互联网科技公司简介 互联网和科技技术 互联网科技社 北京互联网科技有限公司 互联网和高科技公司 深圳市运趣互联网科技有限公司 新华互联网科技2019 杭州壁岐互联网科技有限公司 允成互联网科技有限公司融资 无锡工业互联网科技有限公司
0