一个纠结了很久的问题,有关于js防抖结合闭包的一个疑惑,求助
function calcTop (fn, delay) {
let timer = null;
console.log(timer);
return function () {
if (timer) {
clearTimeout(timer);
}
timer = setTimeout(fn, delay);
}
}
window.onscroll = calcTop(scrollTop, 1000);
为什么timer只执行一次呢?不是只要滚动就触发防抖事假吗?求助。。。
相关推荐
浅析JavaScript 函数防抖和节流
主要介绍了JavaScript 函数防抖和节流的相关资料,文中讲解非常细致,帮助大家更好的理解和学习,感兴趣的朋友可以了解下
JS闭包原理及其使用场景解析
闭包定义 可以通过内层函数访问外层函数的作用域的组合叫做闭包。 闭包使用场景 使用闭包来实现防抖 function debounce(callback, time) { var timer; return function () { if (timer) { clearTimeout(timer) } timer = setTimeout(() => { callback() }, time) } }<br data-filtered=filtered><br data-filtered=filtered>wi
JavaScript 闭包的使用场景
主要介绍了JavaScript 闭包的使用场景,帮助大家更好的理解和使用JavaScript,感兴趣的朋友可以了解下
如何解决js函数防抖、节流出现的问题
主要介绍了如何解决js函数防抖、节流出现的问题。SyntheticEvent对象是通过合并得到的。 这意味着在事件回调被调用后,SyntheticEvent 对象将被重用并且所有属性都将被取消。 因此,您无法以异步方式访问该事件。,需要的朋友可以参考下
javascript防抖函数debounce详解
定义及解读 防抖函数 debounce 指的是某个函数在某段时间内,无论触发了多少次回调,都只执行最后一次。假如我们设置了一个等待时间 3 秒的函数,在这 3 秒内如果遇到函数调用请求就重新计时 3 秒,直至新的 3 秒内没有函数调用请求,此时执行函数,不然就以此类推重新计时。 举一个小例子:假定在做公交车时,司机需等待最后一个人进入后再关门,每次新进一个人,司机就会把计时器清零并重新开始计时,重新等待 1 分钟再关门,如果后续 1 分钟内都没有乘客上车,司机会认为乘客都上来了,将关门发车。 此时「上车的乘客」就是我们频繁操作事件而不断涌入的回调任务;「1 分钟」就是计时器,它是司机决定「


