<body>
<div>
<button class="btn">点击</button>
</div>
<script>
const btn = document.querySelector('.btn');
btn.addEventListener('click',throttle(submit,1000))
function submit(){
console.log(79)
}
function throttle(fn,delay){
let time = null;
return function(){
if(time){
clearTimeout(time)
console.log(1)
}
time = setTimeout(()=>{
fn()
console.log(2)
},delay)
}
}
</script>
</body>
第一次点击,time= null,if中的函数就不执行,直接执行settimeout函数,在点击这个时候time就不为null了,可执行if内部函数,把先前正在执行的异步函数清空了。又重新开始执行下一个异步函数。一秒钟内不点击就会把回调函数执行。