防抖和节流
防抖(debounce)
setTimeout 方法
1 | var debounce = function(fn, delayTime) { |
思路解析:
执行 debounce 函数之后会返回一个新的函数,通过闭包的形式,维护一个变量 timeId ,每次执行该函数的时候会结束之前的延迟操作,重新执行 setTimeout 方法,也就实现了上面所说的指定的时间内多次触发同一个事件,会合并执行一次。
- 上述代码中arguments只会保存事件回调函数中的参数,譬如:事件对象等,并不会保存 fn、delayTime
- 使用 apply 改变传入的fn方法中的this指向,指向绑定事件的 DOM 元素。