call/apply/bind 的箭头函数
Arrow functions with call/apply/bind
Mozilla 开发者网络声明 call
、bind
和 apply
不应与箭头函数一起使用。这是有道理的,因为他们从定义它们的地方获取父级的上下文并自己使用它。
现在,下面是一些我在一些视频中看到的“去抖动”代码。使用 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
不会改变(但也正常!)。
Mozilla 开发者网络声明 call
、bind
和 apply
不应与箭头函数一起使用。这是有道理的,因为他们从定义它们的地方获取父级的上下文并自己使用它。
现在,下面是一些我在一些视频中看到的“去抖动”代码。使用 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
不会改变(但也正常!)。