关于不使用apply调用会报错
return function(){
timer && clearTimeout(timer);
timer = setTimeout(() => {
func.apply(this);
}, delay)
};
setTimeout中的函数this指向search-box,为什么直接调用func()会报错
正在回答
你好同学,因为直接调用的函数是window调用的,如果在之前的js中,this应该指向window。不过es6中是严格模式,严格模下指向的是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的话,同学可以输出一下,this就是undefined,那么如上代码也就没有办法执行了。
祝学习愉快,望采纳。
相似问题
登录后可查看更多问答,登录/注册
- 参与学习 人
- 提交作业 239 份
- 解答问题 10739 个
本阶段带你深入前端开发的肌理,通过ES6基础知识和前端主流高级框架的学习,助你快速构建企业级移动webAPP应用,进入职场的终极battle
了解课程
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星