关于函数节流

关于函数节流

// 函数节流
export const debounce = (func, delay = 200) => {
  let timer = null;

  return function (...args) {
    timer && clearTimeout(timer);
    timer = setTimeout(() => {
      func.apply(this, args);
    }, delay);
  };
};

1.func.apply(this, args);中的this绕来绕去的,能否讲解下这里的this指向?

2.args传递的是什么?什么情况下会传递多个参数?

正在回答

登陆购买课程后可参与讨论,去登陆

2回答

同学你好,问题解答如下:

1.setTimeout中使用的箭头函数,箭头函数中的this在函数创建时绑定。定时器是在如下匿名函数中创建的,所以这个定时器中使用的this与这个匿名函数的this指向的是相同的。

http://img1.sycdn.imooc.com//climg/5e92b48f09e0088f06340263.jpg

接下来就看这个匿名函数中this的指向了。如下分析:

上面匿名函数是debounce函数的返回值,如下调用了debounce,返回值就是上面的匿名函数。函数中的this指向函数调用者。也就是说这个匿名函数是在MeSearchBox执行的,所以this指向的是当前组件MeSearchBox。

http://img1.sycdn.imooc.com//climg/5e92b5be090e90f805110298.jpg

2.args在这里没有用上,可以去掉哦。

如果我的回答帮助到了你,欢迎采纳,祝学习愉快~


  • 迷失的小麦 提问者 #1
    args如果传递的话,是不是传递2个值或1个值,一个是改变后的值,一个是改变前的值(即:最多2个值)
    2020-04-12 14:49:14
好帮手慕夭夭 2020-04-12 17:40:48

同学你好,因为这里没有用到args,所以不好判断具体要传递什么参数。即要具体情况具体分析,假如后续用到了改变前或者改变后的值,可以像同学说的那样传递哦。

祝学习愉快~

问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星

相似问题

登录后可查看更多问答,登录/注册

请稍等 ...
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师