猿问

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

functiondebounce(fn,wait,immediate){
vartimer=null
returnfunction(){
varargs=arguments
varcontext=this
if(immediate&&!timer){
fn.apply(context,args)
}
if(timer){
clearTimeout(timer)
}
timer=setTimeout(function(){
fn.apply(context,args)
},wait)
}
}
一直没搞清楚,这个arguments是debounce这个函数的吗?请大佬详细讲讲。
用apply绑定,是与闭包有关吗?
qq_遁去的一_1
浏览 220回答 2
2回答

阿波罗的战车

假设你现在监听了一个鼠标移动事件: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值
随时随地看视频慕课网APP

相关分类

JavaScript
我要回答