请问老师关于callback
来源:15-5 【实用】onResize 方法防重发机制开发
hy_wang
2020-09-27
请问以下老师这里的apply的用意是什么意思?
这里的this我理解就是闭包函数的this,arguments也没有实际作用。老师可以稍微解释一下吗,的确不是很明白为什么这样做,为什么不直接调用传入的callback?
写回答
2回答
-
hy_wang
提问者
2020-09-28
export function debounce(deley, callback) { let task; return function () { clearTimeout(task) console.log(this, 'this') task = setTimeout(() => { console.log(this, 'this2') callback.apply(this, arguments) }, deley) } }
首先,调用方式是
window.addEventListener("resize", debounce(100, initSize, "a", "b"));
这里两次打印this都是window对象,所以我不是很明白apply是怎么改变,
以及arguments的作用是什么,它在内层的return函数中,而return 的function中arguments不存在任意意义啊,它怎么记录传递的参数?请老师解惑
012020-09-29 -
扬_灵
2020-09-28
同学你好,这是使用apply的用意是用来绑定this的,arguments是用来记录函数传递的参数的。在debounce中使用callbakc(this,arguments)后在onResize函数打印发现this的指向是window,使用callback.apply(this,arguments)后在onResize函数打印发现this的指向是事件对象,setTimeout()函数中作用域是全局的,也就是setTimeout中的this指的是window。用apply绑定this指向resize的this,这也是为什么不直接调用传递的callback的原因。就是为了让callbakc函数内的this与原本的事件回调函数绑定的this保持一致。
022021-04-20
相似问题