防抖和节流
通常应用在输入查询,滚动加载,抢票,窗口改变等应用场景。
防抖
一句话概括:高频函数连续调用时,空闲时间必须大于给定时间。
原理就是利用异步函数来延时执行。
首先实现结束边界版 (结束边界就是在空闲时间结束时执行) es6 版
1 | // func 要防抖的函数 |
实现结束边界版 (结束边界就是在空闲时间结束时执行) es5 版
主要是异步函数牵涉到的执行上下文问题
1 | // func 要防抖的函数 |
实现开始边界版 (开始边界就是在空闲时间开始时执行) es6
通过 flag 来开关这个功能
1 | // func 要防抖的函数 |
节流
将连续执行优化为每隔一段时间执行
也就是说异步函数已经在执行,那么就不会开另外一个异步函数
我们来代码翻译这句话
1 | function throttle (func, wait){ |
节流立即执行
1 | function throttle(func, wait, flag){ |
每隔地段时间执行一次
1 | function throttle(func, wait){ |
注意
通常防抖和节流函数是用在异步函数中的,所以 定义函数的地方 不能使用 箭头函数
例如例子中的 return function()
错误用法,无法获取被点击的对象
1 | button.addEventListener('click', () => { |
lodash
lodash 防抖函数实现
1 | _.debounce(func, [wait=0], [options={}]) |