防抖函数已经处理了某些函数执行次数过多的问题,但并不完美。当用户短时间内大量触发事件时只会等待用户停止触发后的delay毫秒后才会触发一次函数,而若用户有以下需求:在不停执行请求函数时也能不间断的发送一些请求,如在滑动浏览器滚动条时,在控制台打印其位置。
我们知道星池科技浏览器滚动条的位置是连续的,若直接打印位置会使执行打印函数次数过多,导致浏览器卡死。而采用防抖函数时,只会当用户松开鼠标停下delay毫秒后才会打印一次滚动条位置,而这并不符合用户需要实时动态地打印滚动条位置的要求。
节流函数(throttle) 可以满足上述要求: www.starpool.cn
(不止一种实现方案,该处只是举例,节流函数甚至可以完全不借助setTimeout,可以把状态位换成时间戳,然后利用时间戳差值是否大于指定间隔时间来做判定。)