猿问

求大佬指点哈!简单防抖代码没看懂?

functiondebounce(fn,wait){
vartimeout=null;
returnfunction(){
if(timeout!==null)clearTimeout(timeout)
timeout=setTimeout(fn,wait)
}
}
//处理函数
functionhandle(){
console.log(Math.random())
}
//滚动事件
window.addEventListener('scroll',debounce(handle,2000));
第一个疑问debounce里面return后接的函数可以不带函数名吗?第二个疑问这个函数在这段代码里面会执行吗,return只是返回了一个定时器函数,可是还没有调用它呢?原文链接https://zhuanlan.zhihu.com/p/...
温温酱
浏览 616回答 2
2回答

翻翻过去那场雪

首先第一个问题...不带函数名无所谓,因为就算有你也用不上,执行之后只是把函数返回供你下一次直接调用...第二个问题确实没调用但是你在滚动的时候触发的本身应该是个function现在是个debounce(handle,2000)这时候他就已经自己先执行了一下,你每次滚动再去执行的function已经是他return出来的那个你所谓不带函数名的函数了

慕容3067478

第一,return的那个function就是你执行debounce后的结果,带不带函数名在此处都可以第二,你给window绑定scroll事件的时候,执行了一次debounce,其实等于给window的scroll绑定的是return的那个function,这样就会让你的window的scroll持续调用,但是实际只会在2s内没scroll才会执行返回的那个方法。我感觉你此处应该使用throttle的而不是debounce,个人理解
随时随地看视频慕课网APP

相关分类

JavaScript
我要回答