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/...
2 回答

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

慕容3067478
TA贡献1773条经验 获得超3个赞
第一,return的那个function就是你执行debounce后的结果,带不带函数名在此处都可以第二,你给window绑定scroll事件的时候,执行了一次debounce,其实等于给window的scroll绑定的是return的那个function,这样就会让你的window的scroll持续调用,但是实际只会在2s内没scroll才会执行返回的那个方法。我感觉你此处应该使用throttle的而不是debounce,个人理解
添加回答
举报
0/150
提交
取消