带有调用/应用/绑定的箭头函数

问题描述

Mozilla Developer Network 声明 callbindapply 不应与箭头函数一起使用。有道理,因为它们从定义它们的地方获取父对象的上下文并自行使用。

现在,下面是我在一些视频中看到的“去抖动”的一些代码在这里使用 apply 是否也有作用?

const getData = () => {

}

const debounce = function(fn,d) {
    let timer;
    return function() {
        let context = this,args = arguments;
        clearTimeout(timer);
        timer = setTimeout(() => {
            fn.apply(context,arguments);
        },d);
    }
}

编辑:在 debounce 函数中将 getData 更改为 fn。

解决方法

context 参数没有任何作用(因为它设置了 this,而您不能对箭头函数执行此操作)。

arguments 数组确实得到应用。

如果您专门为箭头函数编写代码,那么惯用的方法是传播参数:

getData(...arguments);

在此特定上下文中,debounce 函数可以处理传递给 fn 的任何类型的函数(并且您应该在超时内使用 fn 而不是 getData)。

如果您传入一个非箭头函数,则返回的函数将让 this 正常工作。

如果你传入一个箭头函数,那么返回的函数将有 this 不会被改变(但也是正常的!)