面试高频手撕题 | 23.实现一个防抖和节流
一、知识点
防抖和节流都是在 JavaScript 中常见的用于优化性能的技术。
- 防抖:是一种在短时间内多次触发同一事件,只执行最后一次或只在开始时执行的技术。它的目的是减少不必要的事件调用,避免在短时间内频繁执行某个操作。
- 节流:是一种限制某个函数在一定时间内只能被调用一次的技术。它的目的是控制函数的调用频率,减少不必要的性能消耗。
二、思路分析
- 防抖的思路:在事件被触发后,延迟一定时间执行回调函数,如果在延迟时间内该事件再次被触发,则重新计时,直到延迟时间内没有再次触发事件,才执行回调函数。
- 节流的思路:在指定的单位时间内,只允许触发一次函数,如果该单位时间内触发多次函数,只有一次生效。
三、JavaScript 解答
-
防抖的实现:
function antiShake(fn,delay) { let timer; return function(...args) { // 清除定时器 clearTimeout(timer); // 使用定时器 timer = setTimeout(()=>{ fn.apply(this,args); },delay) } } const button = document.getElementById('myButton'); // 绑定事件处理程序 button.addEventListener('click', antiShake(()=>{ console.log('按钮被点击了') },1000))
在上述示例中,使用
setTimeout
实现了防抖功能。在指定的单位时间内,只响应最后一次。 -
节流的实现
function throttling(fn,delay) { let flag = true; return function(...args) { if(flag) { flag = false; setTimeout(()=>{ fn.apply(this,args); flag = true },delay) } } } const button = document.getElementById('myButton'); // 绑定事件处理程序 button.addEventListener('click',throttling(()=>{ console.log('按钮被点击了') },1000))
在上述示例中,使用了一个布尔值
flag
来控制函数的执行,实现了节流功能。
四、Java 解答
在 Java 中,你可以使用TimeUnit
类来实现防抖和节流。
-
防抖的实现:
import java.util.Timer; import java.util.TimerTask; public class Debounce { private Timer timer; private Runnable task;
剩余60%内容,订阅专栏后可继续查看/也可单篇购买
2024前端面试高频手撕题 文章被收录于专栏
2024前端面试高频手撕题的作用包括但不限于提升面试竞争力、检验基础知识掌握程度、提高问题解决能力等。本专栏从知识点,思路分析,JavaScript解答,Java解答,总结等五个方面全方面解答。适用于:准备前端开发岗位面试的求职者、希望提升前端开发技能和知识的学习者、准备升职或跳槽的前端开发人员。掌握面试高频手撕题都是非常有益的,它能够帮助你建立起扎实的前端基础知识和问题解决能力。