- 32
- 0
防抖函数是否有更高级的写法
相关代码
function debounce(fn) {
let timeout = null;
return function () {
if(!timeout) {
fn.apply(this,arguments);
timeout = setTimeout(() => {
// clearTimeout(timeout); // 清除定时器操作
timeout = null
}, 500);
}
}
}
function say(e) {
console.log('防抖了哦',e)
}
btn.addEventListener('click', debounce(say))
防抖有两种写法,一种是先执行函数,第二种是后执行函数。这里写的是前者。
思路
- 将我们我们需要的函数(既say函数)进行防抖化
- 在绑定监听事件中,防抖函数执行,返回一个闭包函数
- 每次点击执行该闭包函数
- 第一次点击,立即执行say函数,当在规定的时间内再次点击时,say函数不执行
- 等规定时间过后,点击方可执行
问题
- 通过在setTimeout函数里 执行timeout = null,而不执行清除函数的操作可以达到效果,但是这样做可行?
- 改函数返回一个闭包函数,是否会有内存泄漏以及在点击多次后对内存产生的一些影响
特此鸣谢前来围观的各路侠客
希望大佬们能多维度的评价这种写法的好与坏,以及可用性等。
因此方交流,而不忘于江湖[抱拳]
0
打赏
收藏
点击回答
您的回答被采纳后将获得:提问者悬赏的 10 元积分
网站公告
- 扫一扫访问手机版
回答动态

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器更新之后。服务器里面有部分玩家要重新创建角色是怎么回事啊?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题函数计算不同地域的是不能用内网吧?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题ARMS可以创建多个应用嘛?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题在ARMS如何申请加入公测呀?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题前端小程序接入这个arms具体是如何接入监控的,这个init方法在哪里进行添加?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器刚到期,是不是就不能再导出存档了呢?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器的游戏版本不兼容 尝试更新怎么解决?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器服务器升级以后 就链接不上了,怎么办?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器转移以后服务器进不去了,怎么解决?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器修改参数后游戏进入不了,是什么情况?预计能赚取 0积分收益
- 回到顶部
- 回到顶部
