call/apply/bind 的箭头函数

Arrow functions with call/apply/bind

Mozilla 开发者网络声明 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);
    }
}

编辑:在去抖函数内将 getData 更改为 fn。

context 参数什么都不做(因为它设置了 this 而你不能对箭头函数这样做)。

arguments 数组确实得到了应用。

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

getData(...arguments);

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

如果你传入一个非箭头函数,那么返回的函数将this正常工作。

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