js面试题之手写节流函数和防抖函数
函数节流:不断触发一个函数后,执行第一次,只有大于设定的执行周期后才会执行第二次
1 /* 2 节流函数:fn:要被节流的函数,delay:规定的时间 3 */ 4 function throttle(fn,delay){ 5 // 记录上一次函数出发的时间 6 var lastTime = 0 7 return function(){ 8 // 记录当前函数触发的时间 9 var nowTime = new Date().getTime() 10 // 当当前时间减去上一次执行时间大于这个指定间隔时间才让他触发这个函数 11 if(nowTime - lastTime > delay){ 12 // 绑定this指向 13 fn.call(this) 14 //同步时间 15 lastTime = nowTime 16 } 17 } 18 }
函数防抖:不断触发一个函数,在规定时间内只让最后一次生效,前面都不生效
1 function debounce(fn,delay){ 2 var timer = null 3 // 清除上一次延时器 4 return function(){ 5 clearTimeout(timer) 6 // 重新设置一个新的延时器 7 timer = setTimeout(() => { 8 fn.call(this) 9 }, delay); 10 } 11 }
更多面试题请前往githubhttps://github.com/bettersong/interview