在递归而不是迭代中实现去抖功能的原因是什么?

What are reasons for the debouncing function implemented in recursion instead of iteration?

在这个 post 中,我们有一段去抖功能: Can someone explain the "debounce" function in Javascript

它使用递归作为算法。但是,这似乎不符合典型的递归情况,其中每个步骤都有一个 smaller 前一步的实例。我想知道使用递归是否有任何优势?对我来说,这种方法不可避免地会因递归调用而加重调用堆栈的负担。有人可以列出一些支持这种递归方法的理由吗?谢谢

那里没有递归。

我认为您将内部关键字 function 误认为是对正在定义的函数的调用。

事实并非如此

这是一个函数,returns 一个(不同的)函数。

当您调用 debounce(foo) 时,您会返回一个函数。

例如

function foo (foothing) {
  console.log(foothing)
}

debounced_foo = debounce(foo)

然后你可以调用那个函数:

debounced_foo(my_param)
debounced_foo(my_param)
debounced_foo(my_param)

它会做 foo() 会做的事情,除了它只会做一次而不是快速连续做很多次。