关于节流函数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把参数传递了过去
祝学习愉快,望采纳。
相似问题