防抖 所谓防抖,就是指触发事件后在n秒内函数只能执行一次,如果在n秒内又触发了事件,则会重新计算函数执行时间,简而言之,防抖就类似回城,打断就得重新回。 代码实现desc函数防抖paramfn函数paramwait延迟执行毫秒数paramimmediatetrue表立即执行,false表非立即执行constdebouncefunction(fn,wait,immediatefalse){lettimernullreturnfunction(){letcontextthisletargsargumentsif(timer){触发事件之后,在n秒内函数只能执行一次,如果在n秒内又触发了函数,则会重新计算函数执行事件clearTimeout(timer)}if(immediate){立即执行版本letcallNow!timerif(callNow){fn。apply(context,args)}timersetTimeout((){timernull},wait)}else{timersetTimeout((){fn。apply(context,args)},wait)}}}节流 所谓节流,就是指连续触发事件但是在n秒中只执行一次函数。节流会稀释函数的执行频率。简而言之,节流就类似技能需要冷却时间到了才能用。 代码实现desc函数节流paramfn函数paramwait延迟执行毫秒数paramtype1表时间戳版,2表定时器版constthrottlefunction(fn,wait,type){if(type1){letpreTime0returnfunction(){letcontextthisletargsargumentsletnowTimenewDate()if(nowTimepreTimewait){preTimenowTimefn。apply(context,args)}}}else{lettimernullreturnfunction(){letcontextthisletargsargumentsif(!timer){当延迟时间结束后,执行函数timersetTimeout((){timernullfn。apply(context,args)},wait)}}}}