关于节流函数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中有一个数据

http://img.mukewang.com/climg/5d5bcceb0001d3b102060060.jpg

要监听它,可以如下去写:

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

http://img.mukewang.com/climg/5d5bcdc10001b0eb04430119.jpg

这样再结合老师上一次回复中,就理解了。debounce调用后,返回值是它内部的匿名函数。即如下:

所以query后面实际上接收的就是这个匿名函数,args接收的就是query的值哦。

http://img.mukewang.com/climg/5d5bcf240001f87608200579.jpg

祝学习愉快,望采纳。

0

好帮手慕夭夭

2019-08-20

你好同学,首先参考如下去理解debounce的使用:

假设有个函数fn,需要限制1s只执行一次。先传入debounce,返回一个新函数fn1。

http://img.mukewang.com/climg/5d5b6558000145f202760048.jpg

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

http://img.mukewang.com/climg/5d5b65c1000138ea04080160.jpg

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

http://img.mukewang.com/climg/5d5b65980001d79900910054.jpg

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

http://img.mukewang.com/climg/5d5b66960001763506300210.jpg

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

http://img.mukewang.com/climg/5d5b66e10001e6cd05180136.jpg

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

http://img.mukewang.com/climg/5d5b68ba0001a14e04130053.jpg

祝学习愉快,望采纳。

0
hoso_crazy
h 说什么?这么难明的。监听query的变化,query和args有什么联系?
h019-08-20
共1条回复

0 学习 · 10739 问题

查看课程