/**
* 节流函数 限制函数在指定时间段只能被调用一次
* 用法 比如防止用户连续执行一个耗时操作 对操作按钮点击函数进行节流处理
*/
function throttle(fn, wait, ...args) {
let timer = null;
return () => {
if(!timer) {
timer = setTimeout(() => {
fn(args);
timer = null;
}, wait)
}
}
}
// 第一次就会执行
function throttle2(fn, wait, ...args) {
let preTime = Date.now();
return () => {
let now = Date.now();
if(now - preTime >= wait) {
fn(args);
preTime = now;
}
}
}
/**
* 函数调用后不会被立即执行 之后连续 wait 时间段没有调用才会执行
* 用法 如处理用户输入
*/
function debounce(fn, wait, ...args) {
let timer = null;
return () => {
if(timer) {
clearTimeout(timer);
}
timer = setTimeout(fn, wait, args);
}
}
window.addEventListener('click', debounce((num)=> {
console.log(num);
}, 1000, 1))
console