Open verymuch opened 4 years ago
你好, fn.call(this, args)
是否该改成 fn.call(this, ...args)
?
你好,
fn.call(this, args)
是否该改成fn.call(this, ...args)
?
是的,谢谢指出,这个地方疏忽了,已修改。
后面还有个让人疑惑的地方 fn.call(this, false, ...args);
和 fn.call(this, true, ...args);
, 这个是为了demo演示时区分首次触发和常规触发加的标志位
你好,
fn.call(this, args)
是否该改成fn.call(this, ...args)
?是的,谢谢指出,这个地方疏忽了,已修改。
后面还有个让人疑惑的地方
fn.call(this, false, ...args);
和fn.call(this, true, ...args);
, 这个是为了demo演示时区分首次触发和常规触发加的标志位
收到, 刚才也想提问来着, 看完后明白了!
一、概念
防抖
debounce
和节流throttle
的概念并不是JS所特有的。它们是在对函数持续调用时进行不同控制的两个概念。今天我们先介绍防抖。防抖是为了避免用户无意间执行函数多次。比如有些用户喜欢在点击的时候使用double click双击,或者就是手抖连续点了两下,这就可能会导致一些意想不到的问题。
通过防抖可以在事件触发一定时间后没有再次触发同一事件时,再去执行相关的处理函数。
就好比你去菜市场买菜,到某个小摊上开始挑菜,接连挑好一袋又一袋放在摊主面前,摊主并不会每一袋都给你结账,而是会等着问你:“还要别的吗?”,等你确认完不要了,才会结账。
你可以通过歪马写的这个demo查看常规无限制函数调用和防抖(节流)之后的可视化对比,完整demo地址如下: https://codesandbox.io/s/yibubupiannigaodonghanshufangdouhejieliu-nyqe9?file=/index.html。
二、作用&应用场景
在具体实现之前,我们先简单了解一下防抖和节流的作用以及在哪些业务中会用到。
防抖和节流(这里先包含它吧)主要能够给我们带来以下好处:
防抖的应用场景有以下几个方面:
window.resize
--> 避免UI渲染阻塞,浏览器卡顿三、如何实现防抖
总结
我知道这篇文章似乎读起来让人晕晕乎乎的,并且你会发现,这和你想象中的防抖的实现似乎并不一样。但是这又怎样呢?多数时候,我们都是根据具体的使用场景去实现我们需要的功能,所以重要的是要懂得如何去实现,同时也要随机应变。
并且最后你也知道了如何去实现debounce,并且知道可能会有哪些坑了不是吗?
如果你喜欢,欢迎扫码关注我的公众号,我会定期陪读,并分享一些其他的前端知识哟。