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

跪求!防抖和节流里边的 arguments是谁的啊万分感谢

跪求!防抖和节流里边的 arguments是谁的啊万分感谢

qq_遁去的一_1 2019-07-28 12:32:46
functiondebounce(fn,wait,immediate){vartimer=nullreturnfunction(){varargs=argumentsvarcontext=thisif(immediate&&!timer){fn.apply(context,args)}if(timer){clearTimeout(timer)}timer=setTimeout(function(){fn.apply(context,args)},wait)}}一直没搞清楚,这个arguments是debounce这个函数的吗?请大佬详细讲讲。用apply绑定,是与闭包有关吗?
查看完整描述

2 回答

?
阿波罗的战车

TA贡献1862条经验 获得超6个赞

假设你现在监听了一个鼠标移动事件:
functionhandler(e){console.log(e,this);}
el.onmousemove=handler;
当触发事件时,打印得到事件对象以及当前元素(el)。
现在给事件处理函数加上了防抖:el.onmousemove=debounce(handler)。对于debounce(handler),返回值是一个函数,所以等同于el.onmousemove=denouceHandler,只是一个新的事件处理函数而已,它的参数中就会包含事件对象,也就是arguments中包含事件对象。
至于fn.apply(context,args),前面提到handler中打印this可以拿到正确的值(当前元素),这里即改变this的指向。于是乎在加了防抖函数之后去触发事件时,才能保证fn内部能够拿到事件对象以及正确的this值
                            
查看完整回答
反对 回复 2019-07-28
  • 2 回答
  • 0 关注
  • 219 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信