关于节流函数return function(...args)
来源:2-1 搜索框组件
soso_crazy
2019-08-19 19:56:48
// 函数节流
export const debounce = (func, delay = 200) => {
let timer = null;
return function (...args) {
// 清除上一次的定时器
timer && clearTimeout(timer);
timer = setTimeout(() => {
// 延时时间到了之后执行需要执行的函数
func.apply(this, args);
}, delay);
};
args的参数是如何传递给debounce的func参数?debounce没有arg参数呀?内部返回的函数参数怎样能传给func?
query: debounce(function () {
this.$emit('query', this.query);
})
这里的debounce参数func是一个函数,执行函数派发事件,那debounce内部返回的函数如何传args给function()?2回答
好帮手慕夭夭
2019-08-20
你好同学,从你的回复中看,是没有掌握监听的基础语法哦。老师给你讲解一下监听,知道监听是怎么回事就明白了。假如data中有一个数据

要监听它,可以如下去写:
如下的query就是要监听的数据名,后面跟一个匿名函数。arg接收的就是query的值,例如query变成了“aaa” ,那么arg的值就是“aaa”。

这样再结合老师上一次回复中,就理解了。debounce调用后,返回值是它内部的匿名函数。即如下:
所以query后面实际上接收的就是这个匿名函数,args接收的就是query的值哦。

祝学习愉快,望采纳。
好帮手慕夭夭
2019-08-20
你好同学,首先参考如下去理解debounce的使用:
假设有个函数fn,需要限制1s只执行一次。先传入debounce,返回一个新函数fn1。

因为debounce内部返回了一个函数,所以fn1接收的debounce返回值就它内部的函数。即调用fn1执行的就是它

调用fn1传入实际的参数,所以args这个参数是调用fn1时传入的x。

而然后将x通过appley方法传给func哦。课程里面就是这样,调用函数debounce,query接收了它的返回值。

课程中是使用的双向数据绑定调用的query,所以query会接收这些输入的内容作为实际参数。(因为debounce是通用的函数,肯定要考虑多个参数的情况,所以使用扩展运算符的形式把这些参数放在一个数组arg中。案例中是传入一个)。即搜索框输入的内容就是实际参数,然后arg形参接收了这些实际的参数。

所以在内部函数中,通过apply调用func把参数传递了过去

祝学习愉快,望采纳。
相似问题