防抖deBounce
“防抖”(Debouncing)是一种在前端开发等领域广泛应用的技术,核心目的是过滤掉高频、无意义的重复触发信号,只保留 “有效” 触发,避免资源浪费或功能异常。
防抖的本质是设置一个 “延迟时间(等待期)”,当事件被触发时:
先清除之前未执行的延迟任务(若存在);
重新设置一个新的延迟任务,等待延迟时间结束后再执行目标函数。
只有当事件在 “延迟时间内不再被触发”(即进入 “稳定状态”),目标函数才会真正执行。
简而言之,就是可以不断刷新,从头开始执行,类似于回城
在es6之前,防抖的写法
function deBounce(callback,time){
var timer = null;
return function() {
if(timer) {
clearTimeout(timer);
}
var args = arguments;//利用闭包保存arguments
timer = setTimeout(function() {
callback.apply(null,args);
},time);
}
}
优点是兼容性极佳,可在所有 JavaScript 环境中运行;无需担心 ES6 语法的转译问题,适合对兼容性要求极高的场景(如旧系统维护)。
缺点也很明显arguments
是类数组对象,使用数组方法需先转换,操作繁琐;语法较陈旧,不符合现代 JavaScript 开发习惯;在箭头函数中无法使用 arguments
(不过此处返回的是普通函数,不受影响)。
es6之后的写法
function deBounce(callback, time) {
let timer = null;
return function (...args) {
if (timer) {
clearTimeout(timer);
}
timer = setTimeout(() => {
callback.apply(null, args);
}, time);
};
}
缺点是兼容性受限,无法在不支持 ES6 的环境中使用;若需要兼容老旧浏览器,需通过 Babel 转译,可能增加代码体积。
本文是原创文章,采用 CC BY-NC-ND 4.0 协议,完整转载请注明来自 Ruzenie
评论
匿名评论
隐私政策
你无需删除空行,直接评论以获取最佳展示效果