去抖函数:
function qudou(cb){ console.log('uuuuuuuuu') var timer=null; return function(){ console.log(timer) clearTimeout(timer) timer = setTimeout(function(){ cb() },1000); } } function test(){ console.log(8888) } document.getElementById('btn').addEventListener('click',qudou(test))
为什么这么写,而不是
document.getElementById('btn').addEventListener('click',function(){ qudou(test)() })
把代码复制过去,跑一下就知道了。这里的知识点:闭包。必须把timer设置为全局变量,否则clearTimeout每次清除的都将是函数内部本次的settimeout,而不是上一次的。(上面代码不是用的全局变量,用的闭包代替)
节流函数
function jieliu(cb){ console.log('uuuuuuuuu') var bTime = new Date(); return function(){ current = new Date() if(current-bTime>=1000){ bTime = current; cb() } } } function test(){ console.log('kkkk') } document.getElementById('btn').onclick = jieliu(test);