为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

温温酱 2019-08-09 23:30:19
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出来的那个你所谓不带函数名的函数了
                            
查看完整回答
反对 回复 2019-08-09
?
慕容3067478

TA贡献1773条经验 获得超3个赞

第一,return的那个function就是你执行debounce后的结果,带不带函数名在此处都可以第二,你给window绑定scroll事件的时候,执行了一次debounce,其实等于给window的scroll绑定的是return的那个function,这样就会让你的window的scroll持续调用,但是实际只会在2s内没scroll才会执行返回的那个方法。我感觉你此处应该使用throttle的而不是debounce,个人理解
                            
查看完整回答
反对 回复 2019-08-09
  • 2 回答
  • 0 关注
  • 615 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号