老师能解答一下吗
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)?
正在回答
同学你好, 老师在第一条中有提到了, 如果不使用apply传递this的话,由于es6中是严格模式,严格模下指向的是undefined,this就是undefined
如果帮助到了你, 欢迎采纳,祝学习愉快~~~
同学你好, 因为匿名函数,具体可以参考如下解析:
this指向函数的调用者,debounce调用后返回的是一个匿名函数
实际上query后面所接收的函数是如下匿名函数:
就相当于如下这样:
即当输入内容,触发监听中的query, 匿名函数里面的this才会指向触发监听函数的mine-search-box-wrapper。
apply的第一个参数是传递this的指向,通过apply,把这个匿名函数所指向的this传递给func函数本身。
func是debounce的第一个参数,即如下,这样 this.$emit('query', this.query); 中this指向的就是mine-search-box-wrapper,也就能够指向搜索框的自定义事件了哦。
如果不使用apply传递this的话,因为直接调用的函数是window调用的,如果在之前的js中,this应该指向window。不过es6中是严格模式,严格模下指向的是undefined,this就是undefined,那么如上代码也就没有办法执行了。
如果帮助到了你, 欢迎采纳!
祝学习愉快~~~
- 参与学习 人
- 提交作业 239 份
- 解答问题 10739 个
本阶段带你深入前端开发的肌理,通过ES6基础知识和前端主流高级框架的学习,助你快速构建企业级移动webAPP应用,进入职场的终极battle
了解课程
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星