节流函数和防抖函数都是为了避免一段时间内某个方法被疯狂触发。
但是这两者也有所不同:
节流函数是让某方法在一段时间内只执行第一次
防抖函数是让某方法在一段时间内只执行最后一次
节流函数:
function jieliu(fn,delay){
// 记录上一次触发函数的时间
var lastTime = 0;
return function(){
// 记录当前函数触发的时间
var nowTime = Date.now();
if(nowTime - lastTime > delay){
// 修正this指向问题
fn.call(this)
// 同步时间
lastTime = nowTime;
}
}
}
document.onscroll = jieliu(function() {console.log('scroll事件触发了' + Date.now( ))},200}
防抖函数:
function fangdou(fn,delay){
// 记录上一次的延时器
var timer = null
return function(){
// 清除上一次延时器
// 重新设置新的延时器
timer = setTimeout(function(){
fn.appply(this)
},delay)
}
}
document.getElementById('btn').onclick = fangdou( function(){ console.log('点击事件被触发了' + Date.now()) },200 )