定义
【前端八股文】节流和防抖
防抖
连续触发事件但是在设定的一段时间内只执行最后一次
代码实现思路【定时器】
大概意思就是:
每次按起键盘后,都将之前的定时器删除,重新开始计时。
节流
连续触发事件,只执行一次
代码实现思路【定时器】
意思:
每次触发事件,如果定时器还没结束,我就不执行触发的事件。不会打断当前在执行的任务。
代码
参考https://juejin.cn/post/7079681931662589960#heading-22
// 防抖function debounce(fn) {let timeout = null; return function () {// 如果事件再次触发就清除定时器(此时定时器不为null),重新计时clearTimeout(timeout);timeout = setTimeout(() => {fn.apply(this, arguments);}, 500);};}
// 节流function throttle(fn) {let flag = null; // 通过闭包保存一个标记return function () {if (flag) return; // 当定时器没有执行的时候标记永远是nullflag = setTimeout(() => {fn.apply(this, arguments);// 最后在setTimeout执行完毕后再把标记设置为null(关键)// 表示可以执行下一次循环了。flag = null;}, 500);};}