【问题标题】:What are reasons for the debouncing function implemented in recursion instead of iteration?以递归而不是迭代实现去抖动功能的原因是什么?
【发布时间】:2016-09-22 21:53:37
【问题描述】:

在这篇文章中,我们有一个去抖动功能的 sn-p: Can someone explain the "debounce" function in Javascript

它使用递归作为算法。但是,这似乎不适合典型的递归情况,在这种情况下,每一步都有前一步的较小实例。我想知道使用递归是否有任何优势?对我来说,这种方法不可避免地会通过递归调用给调用堆栈带来负担。有人可以列出支持这种递归方法的一些原因吗?谢谢。

【问题讨论】:

  • 可能是因为我现在真的很困,但是我没有看到函数是如何递归的?
  • 根本没有递归(甚至没有异步伪递归)。您在哪里看到递归调用?
  • 这里不是递归调用settimeout()吗?
  • 不,settimeout 的主体只调用原始函数,不会导致再次调用settimeout
  • 已清除。谢谢大家!

标签: javascript recursion debouncing


【解决方案1】:

那里没有递归。

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

事实并非如此

这是一个返回(不同)函数的函数。

当您调用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() 会做的事情,除了它只会做一次而不是快速连续多次。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-25
    • 1970-01-01
    • 2019-05-22
    • 2014-07-07
    • 2017-12-07
    • 2014-01-08
    相关资源
    最近更新 更多