JavaScript中防抖与节流指的是什么意思
发表于:2025-11-11 作者:千家信息网编辑
千家信息网最后更新 2025年11月11日,这篇文章主要为大家展示了"JavaScript中防抖与节流指的是什么意思",内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下"JavaScript中防抖与节流指的
千家信息网最后更新 2025年11月11日JavaScript中防抖与节流指的是什么意思一、函数防抖(debounce)
1. 什么是防抖?
二、函数节流
2.1 定时器实现
2.2 时间戳实现
2.3 时间戳+定时器
这篇文章主要为大家展示了"JavaScript中防抖与节流指的是什么意思",内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下"JavaScript中防抖与节流指的是什么意思"这篇文章吧。
一、函数防抖(debounce)
1. 什么是防抖?
函数防抖: 在频繁触发某一个事件时,一段时间内不再触发该事件后才会去调用对应的回调函数,在设定间隔时间内如果下一次事件被触发, 那么就重新开始定时器,直到事件触发结束。
规定时间内没有继续触发事件的前提下,再去调用事件处理函数;
具体如下面的例子所示:
/*定义防抖函数 * func:传入一个函数,事件不再持续触发时会调用该函数 * delay:定义持续多久后执行传入的回调函数 * */ function debounce(func,delay) { let timer = null // 用于保存定时器 return function (...args) { // 如果定时器存在,清除定时器,随后重新设置timer if(timer !== null) clearTimeout(timer) timer = setTimeout(func, delay) // 超过delay为接收到事件会调用这里的func 必要的额时候可以修改func的this指向 由于timer对外部存在引用,因此不会被销毁 } } /*事件处理函数*/ function testDeBounce(){ console.log('你看我执行了几次??') } // 接收debounce返回的函数 const temp = debounce(testDeBounce(),1000) /*绑定事件,测试防抖函数*/ window.addEventListener('scroll',()=>{ temp() }); // 这样写最少调用一次事件处理函数,最多也不会多余下面的写法执行的次数 window.addEventListener('scroll', testDeBounce); // 如果这样写的话,每当页面滚动就会调用事件处理函数总结一下思路:
1.定义一个节流函数
2.函数内部使用一个变量保存定时器
3.返回一个函数,函数内部定义:如果定时器已经存在就清除定时器,重新设置定时器
4.定义一个变量来接收
debounce返回的函数5.在事件的回调函数中直接调用上一步的变量接收的方法
二、函数节流
函数节流: 在事件持续触发的前提下,保证一定时间段内只调用一次事件处理函数,就是函数节流;
函数节流实现的方式: 定时器、时间戳、定时器+时间戳;
2.1 定时器实现
思路:
1.定义节流函数
throttle2.定义
timer保存定时器3.返回一个函数。函数内部定义:如果定时器不存在,设置定时器,间隔某一时间后将timer设置为
null,如果在这之前事件再次触发,则定时器中的回调无效
/* * 定义定时器节流函数 * func:传入事件处理函数 * delay:在delay指定的时间内定时器回调无效 * */ function throttle(func,delay) { let timer = null const context = this return function(...args){ // 如果定时器不存在 if(!timer){ timer = setTimeout(()=>{ func.apply(context,args) // 考虑返回的函数调用的环境,因此这里不直接使用this timer = null // delay之后清除定时器 },delay) } } } function test() { console.log('啊啊啊!') } const temp = throttle(test,1000) document.querySelector('button').addEventListener('click',()=>{ temp() })2.2 时间戳实现
var throttle = function(func, delay) { var prev = Date.now(); return function() { var context = this; var args = arguments; var now = Date.now(); if (now - prev >= delay) { func.apply(context, args); prev = Date.now(); } } } function handle() { console.log(Math.random()); } window.addEventListener('scroll', throttle(handle, 1000));2.3 时间戳+定时器
// 节流throttle代码(时间戳+定时器):var throttle = function(func, delay) { var timer = null; var startTime = Date.now(); return function() { var curTime = Date.now(); var remaining = delay - (curTime - startTime); var context = this; var args = arguments; clearTimeout(timer); if (remaining <= 0) { func.apply(context, args); startTime = Date.now(); } else { timer = setTimeout(func, remaining); } }}function handle() { console.log(Math.random());} window.addEventListener('scroll', throttle(handle, 1000));以上是"JavaScript中防抖与节流指的是什么意思"这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注行业资讯频道!
函数
定时器
事件
时间
处理
意思
内容
变量
篇文章
前提
思路
面的
学习
帮助
频繁
孤独
必要
代码
例子
再次
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
黑客入侵ea服务器的原因是什么
如何用jsp进行数据库
18届网络安全年会
武汉信息网络安全维护条件
nosql是持久化数据库吗
有效数据库安全
数据库表中如何设置长度
关于网络安全的短视频图片
标语网络安全
软件开发用几g内存
全球服务器份额
db2数据库基本概念
上征信跟报送数据库
软件开发费入什么费用
网络安全是无硝烟的战争
软件开发专业需要考什么证书吗
虚拟网络技术专业怎么样
网络道德与网络安全手抄报
小学生网络安全知识竞赛题
厦门保力网络技术有限公司
nosql是持久化数据库吗
服务器远程登录密码过期
活词典 数据库
中国网络安全政策内容
海南大学网络安全学院怎么样
前端开发和软件开发区别
软件开发企业成本归集科目
黑马程序员数据库初始化脚本
工业控制网络技术理解
中资在美国上市的网络安全公司