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值
添加回答
举报
0/150
提交
取消