刚写了函数防抖,再来个函数节流
首先有同学问了:
防抖和节流有什么区别呢?
防抖(debounce)
指在时间n内,函数被触发多次,但是只执行一次,执行最新的触发。也就是在时间n内,碰到新的触发,就清除之前的,重新计时。
节流(throttle)
当持续触发某个事件时候,会有规律的每隔时间n就执行一次
节流详细解释下 预定一个函数只有在大于等于执行周期时才执行,周期内调用不执行,就是说一个程序执行需要1秒,开始执行后你在0.5s处,再次触发这个函数执行,是无效的。但当过了1s后,你在1.5s时候触发了一下,是可以执行的,而你刚才0.5s的触发是无效操作。
防抖前前篇文章已经实现了,那么节流呢?
版本1:
function throttle(fn, wait) {
let prev = new Date();
return function() {
const args = arguments;
const now = new Date();
if(now - prev > wait) {
fn.apply(this, args);
prev = new Date();
}
}
}
版本2
function throttle(fn,delay) {
var lastTime = 0;
return function () {
//记录当前函数
var nowTime = new Date().getTime()
//当前时间减去上一次执行时间才让他触发这个函数
if(nowTime - lastTime > delay) {
//绑定this指向
fn.call(this)
//同步时间
lastTime = nowTime;
}
}
}
扫码加群
