函数节流是指用户在重复操作时,在设定的时间内,延时执行,控制用户操作的频率,例如:滚动条快速滚动,重复请求等等
// immediate 控制是否立即执行
function throttle(func, wait, immediate) {
let preTime = 0;
let timerId;
return function() {
let _this = this;
let args = arguments;
if(immediate) { // immediate 为true 时立即执行
let nowTime = Date.now();
if(nowTime - preTime > wait) {
func.apply(_this, args);
preTime = nowTime;
}
} else {
if(!timerId) {
timerId = setTimeout(function() {
func.apply(_this, args);
timerId = null;
}, wait);
}
}
}
}