Javascript JS中高阶函数的混淆

Javascript JS中高阶函数的混淆,javascript,Javascript,我是JS新手,正在学习高阶函数及其优点。到目前为止,我得到的是,HOFs允许创建泛型函数,我们可以将其重新用于几个相关操作,我希望我是对的,为什么我们需要将函数作为参数传递或返回函数来生成泛型函数的函数。好的,若我们想要生成通用的和可重用的函数,那个么为什么我们需要将函数作为参数传递或返回函数。请大家帮助:(这允许您拥有一个可以向其传递回调函数的函数。例如,在jQuery中,您可以执行此操作$(文档)。在(“单击“,”.my class selector”,myFunction);这将在您使用类

我是JS新手,正在学习高阶函数及其优点。到目前为止,我得到的是,HOFs允许创建泛型函数,我们可以将其重新用于几个相关操作,我希望我是对的,为什么我们需要将函数作为参数传递或返回函数来生成泛型函数的函数。好的,若我们想要生成通用的和可重用的函数,那个么为什么我们需要将函数作为参数传递或返回函数。请大家帮助:(

这允许您拥有一个可以向其传递回调函数的函数。例如,在jQuery中,您可以执行此操作
$(文档)。在(“单击“,”.my class selector”,myFunction);
这将在您使用
类单击某个对象时将
myFunction()
注册为回调函数=“我的类选择器

是高阶的并不一定意味着是泛型的(多态的)。您可以明确地接受Int=>Int函数作为参数,并且仍然是高阶的。它只是意味着该函数可以接受另一个函数作为参数

这样做有很多原因,特别是在函数式编程领域,但是我不打算深入其中的细节,让您更加困惑,因为这本身就是一个非常大的主题

让我们看看Web开发中的几个常见用例(我猜您使用JS就是为了这个)

回调

回调,顾名思义,是在另一个函数完成时回调的函数。考虑下面的函数。

function(argument1, callback){
   var result = doSomethingWithArgument(argument1)
   callback(result)
}
它用它的参数派生一些东西,然后将其传递给回调函数

现在的问题可能是,为什么我们不能在函数外部执行此操作,或者在回调内部派生结果。其中一个主要原因(除了性能影响)是清晰性

在许多情况下,我们希望被调用到不同的回调函数中,或者在运行时更改调用到的函数

例如:

function("username", returnToLoginScreen)

function("username", returnToErrorScreen)
其中returnTo…是将您导航到另一个屏幕的函数。如果您查看Ajax调用,您会注意到它们就是这样工作的

更多关于回调和

筛选、排序、映射等。

另一个很好的例子是筛选或排序。您希望能够在不同条件下筛选数组。假设这是一个对象数组,并且对象具有年龄、高度等字段

过滤器是高阶的,允许您传入不同的比较器,而不是要求您为每个可能的条件定义一个过滤器函数。类似地,您可以通过传入函数来定义自定义排序策略

people.filter(a => a.height > 180) 
people.filter(a => a.age > 20)
前者将过滤身高低于180厘米的人,后者将过滤20岁以下的人


没有您在评论中建议的“帮助”概念。我们从分类的角度来看这一点,不必关心函数如何利用它的参数,而只关心它的效果和返回。函数可能正在使用它“帮助自己”aka做点什么/得到一些结果,或者它可能只是把它链接起来,并把它称为“下一步”

可能想接受一些负面信息(“你可以杀了我,但到底为什么……”),并在“大量文章”中给我们提供线索请看下面一个被广泛使用的高阶函数的例子,也许它会帮助你找出至少一个它们非常有用的原因:不要误解。我们并不为你的无知而生气:我们并不是生来就知道这些东西的。但是如果没有更多的c,这个问题就不适合这样ontext(从措辞上看,你似乎知道并发布了它)。对于简短的版本,每次你添加事件侦听器时,你都使用了HOF。现在想想如果你不能将函数作为参数传递,你会怎么做。“为什么我们需要将函数作为参数传递”关于
element.addEventListener呢(someFunction)
?或
someArray.sort(sortingFunction)
?或
someArray.map(mappingRule)
?我正要说@VLAZ说的话。我认为Javascript中的高阶函数的一个真正有用的例子是。查看相关的用例,它可能会帮助您理解为什么它们会有用。感谢您的友好回答,例如,如果我们将函数a传递给函数b,那么函数a只需将其功能添加到函数b为了帮助它,不是真的,不是。在我上面显示的例子中,
$(文档).on(“单击”,“我的类选择器”,myFunction);
on()函数在所有具有“我的类选择器”类的html元素上注册一个“单击”事件。将这些单击事件中的任何一个传递给
函数myFunction(事件){
function.hey谢谢你善意的解释,可能看起来很奇怪,但请容忍我。想象你正在编写一个应用程序,在这种情况下,你会下意识地告诉自己“我必须创建高阶函数”,这正是你认为必须创建高阶函数的原因:)不幸的是,这个问题没有一个明确的答案。这是你越来越多地获得编程经验的一部分。在web开发中,高阶函数有两个非常常见的用例,我在上面已经介绍了这两个用例。1)回调,2)在类型子集上执行抽象操作的泛型函数(这意味着可以对许多类型调用该函数,而您在一段时间内并不确切知道这些类型的属性),如过滤器、映射等。这在某些FP中也很常见,但请不要混淆它们