老师能解答一下吗

老师能解答一下吗

export const debounce = (func, delay = 200) => {
  let timer = null;
  return function (...args) {
    timer && clearTimeout(timer); 
    timer = setTimeout(() => { 
      func.apply(this, args);
    }, delay);
  };
}

func.apply(this, args)为什么要改变this的指向?是因为箭头函数还是匿名函数function (...args)?

正在回答

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

3回答

同学你好, 老师在第一条中有提到了, 如果不使用apply传递this的话,由于es6中是严格模式,严格模下指向的是undefined,this就是undefined

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

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

  • 远世4101394 提问者 #1
    func相当于function () { this.$emit('query', this.query);}的this指向window,es6下这里是this为undefined,this.$emit('query', this.query);执行不了,所以要用func调用apply方法是改变func中this指向mine-search-bo-wrapper组件。请问是不是这样理解?
    2019-11-15 19:22:52
  • 好帮手慕慕子 回复 提问者 远世4101394 #2
    同学你好, 可以这样理解, 祝学习愉快~~~
    2019-11-16 09:37:49
  • 远世4101394 提问者 回复 好帮手慕慕子 #3
    好的,麻烦老师了
    2019-11-16 18:07:53
好帮手慕慕子 2019-11-15 18:40:02

同学你好,关于apply方法理解有误, func调用apply方法是改变func中this指向mine-search-bo-wrapper组件

这一块确实会比较绕难理解,可以在仔细看一下老师上一条回复中的内容,结合代码实现的效果帮助自己更好的去理解

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

  • 提问者 远世4101394 #1
    没有调用apply之前,func是指向哪里,window吗
    2019-11-15 19:01:53
好帮手慕慕子 2019-11-15 11:14:58

同学你好, 因为匿名函数,具体可以参考如下解析:

this指向函数的调用者,debounce调用后返回的是一个匿名函数

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

实际上query后面所接收的函数是如下匿名函数:

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

就相当于如下这样:

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

即当输入内容,触发监听中的query, 匿名函数里面的this才会指向触发监听函数的mine-search-box-wrapper。

apply的第一个参数是传递this的指向,通过apply,把这个匿名函数所指向的this传递给func函数本身。

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

func是debounce的第一个参数,即如下,这样 this.$emit('query', this.query); 中this指向的就是mine-search-box-wrapper,也就能够指向搜索框的自定义事件了哦。

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

如果不使用apply传递this的话,因为直接调用的函数是window调用的,如果在之前的js中,this应该指向window。不过es6中是严格模式,严格模下指向的是undefined,this就是undefined,那么如上代码也就没有办法执行了。

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

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

如果帮助到了你, 欢迎采纳!

祝学习愉快~~~

  • 提问者 远世4101394 #1
    因为匿名函数this指向window,获取不到args才需要apply将this指向func?
    2019-11-15 18:28:00
问题已解决,确定采纳
还有疑问,暂不采纳

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

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

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

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