1
24
这有几个用例: 1。wrapper”函数。假设你有一堆不同的代码。在每一段代码之前和之后,您还需要做一些其他的事情(例如:日志或Try/Catch异常)。 您可以编写一个“包装器”函数来处理这个问题。如:
2。回调。假设您以某种方式加载了一些数据。与其锁定等待加载的系统,不如在后台加载它,并在结果到达时对其进行处理。 现在你怎么知道它什么时候到达?您可以使用一些类似于信号或互斥体的东西,这些东西很难写并且很难看,或者您可以只创建一个回调函数。您可以将此回调传递给加载程序函数,加载程序函数可以在完成后调用它。
每次你做一个
三。生成器/迭代器这与回调类似,但您可以多次调用回调,而不是只调用一次回调。假设您的加载数据函数不只是加载一个数据位,也许它加载200个。 这最终与for/foreach循环非常相似,只是它是异步的。(您不必等待数据,它会在数据准备就绪时调用您)。
4。延迟加载假设您的函数对某些文本执行了某些操作。但它只需要文本,可能是5次中的一次,而且加载文本可能非常昂贵。 所以代码看起来像这样
处理功能实际上只需要文本20%的时间!我们浪费了所有的努力,把多余的时间装进去。 您可以传递生成文本的函数,而不是传递文本,如下所示:
你必须改变你的
4a缓存
如果你有懒惰的装载,那么
调用的代码
通过传递函数,你可以做很多更高级的事情,这只是表面上的划痕,但希望它能为你指明正确的方向。 |
2
7
最常见的用法之一是作为回调。例如,取一个对数组中的每个项运行函数的函数,并将结果重新分配给数组项。这要求函数为每个项调用用户的函数,这是不可能的,除非它有传递给它的函数。 以下是此类函数的代码:
使用的一个例子是将数组中的每个项乘以2:
|
3
5
如果
这种用法的典型示例是回调函数,在该函数中将回调传递给类似
编辑 :要回答您的意见:
|
4
2
在许多情况下,将函数作为参数传递给另一个函数是有用的。最简单的是一个函数
另一种情况是,当您想在执行一些代码块之前和之后进行某种设置和拆卸时,这是很好的。最近我遇到了一种情况,我需要销毁jquery ui手风琴,做一些事情,然后重新创建手风琴。我需要做的事情有很多不同的形式,所以我写了一个函数
|
5
0
回调。假设您正在执行异步操作,比如Ajax调用。
在dosomeAjaxCall()中,您将回调存储到变量,例如
|
6
0
作为一个Web程序员,这可能不会有太多实际的用途,但是作为一级对象的函数还有另一类用途,目前还没有出现。在大多数函数语言中,比如scheme和haskell,将函数作为参数传递,连同递归一起,是编程的主要部分,而不是偶尔使用的部分。高阶函数(对函数进行操作的函数)如map和fold可以实现在命令式语言中不那么容易获得的非常强大、表达性和可读性的习语。 map是一个函数,它获取一个数据列表和一个函数,并返回一个通过依次将该函数应用于列表中的每个元素而创建的列表。所以如果我想更新我的弹跳球模拟器中所有弹跳球的位置,而不是
我改写(在计划中)
或者在Python中,它提供了一些更高阶的函数和更熟悉的语法,
fold接受一个两位函数、一个默认值和一个列表,并将该函数应用于默认元素和第一个元素,然后应用于该元素和第二个元素的结果,依此类推,最后返回返回返回的最后一个值。因此,如果我的服务器正在批量发送帐户事务,而不是写入
我会写
这些只是最常见的霍夫函数的最简单用法。 |
7
0
我将用排序方案来说明这一点。 假设您有一个对象来代表公司的员工。员工具有多个属性-ID、年龄、工资、工作经验等。 现在,您要对员工列表进行排序——一种情况是按员工ID排序,另一种情况是按工资排序,另一种情况是按年龄排序。 现在你唯一想要改变的就是如何比较。 因此,不必使用多个排序方法,您可以使用一个排序方法,该方法引用可以进行比较的函数。 示例代码:
|
Softly · 单选按钮未按预期取值 1 年前 |
SlickRed · 我无法使用JS关注HTML元素 1 年前 |
assembler · Nextjs没有处理发布请求 1 年前 |
BADRUM · 执行两个获取功能后,如何导航回页面? 1 年前 |
Toniq · javascript为php保存多维数组 1 年前 |