
防抖
const debounce = (fn, delay) => { //存放定时器 let inDebounce; //高阶函数返回值 return function (...args) { const context = this; //清除上一次定时器 clearTimeout(inDebounce); inDebounce = setTimeout(() => { //修改传递进来函数的this指向和参数 fn.apply(context, args); }, delay) }};//触发debounce获取return回的函数const debounceFn = debounce(ajaxFn, 1000);//需要被触发的函数function ajaxFn(data) { console.log(data)}//点击按钮触发测试function btnClick() { debounceFn("相当于调用了ajaxFn")}
节流
function throttle(fun, delay) { let last; //上一次点击时间 let deferTimer; //定时器 return function(...args){ let that = this let now=+new Date();//获取当前时间(number) if(last && now < last +delay){ //未在规定时间内 clearTimeout(deferTimer) deferTimer=setTimeout(()=>{ last=now;//执行后重新赋值last fun.apply(that,args) },delay) }else{ //初始和规定时间内 last=now fun.apply(that,args) } }};//触发debounce获取return回的函数const throttleFn = throttle(ajaxFn, 1000);//需要被触发的函数function ajaxFn2(data) { console.log(data)}//点击按钮触发测试function btnClick2() { throttleFn("相当于调用了ajaxFn2")}