[英]Is a callback also known as a higher-order function?
我正在尝试理解回调函数和高阶函数,但有一篇博客文章中的描述, 理解JavaScript回调函数和使用它们 ,这让我感到困惑,其含义是它们是同一个:
回调函数,也称为高阶函数,......
在Quora上逐字回答问题,询问有关JavaScript中高阶函数和回调的简单解释是什么? 。
这对我来说没有意义。 根据我的理解, 高阶函数接收或返回其他函数 , 回调函数是传递/接收的函数 ,那么如何同时进行? 有什么东西我不理解这种描述吗?
回调函数是作为参数传递给另一个函数的函数,然后在外部函数内调用该函数以完成某种例程或操作。
返回称为高阶函数的函数的函数
回调函数不是高阶函数, 除非它是一个返回函数的函数。
简单的回调:
function toto(callback){ /** some routine or action before */ callback(); } function foo(){ console.log("I'm a simple callback"); } toto(foo);
简单的高阶函数
function toto(){ console.log("I'm a simple Higher-Order Function") return function(){ console.log("I'm the return function"); } } //first log const func = toto(); //second log func();
回调也是一个高阶函数:
function toto(callback){ /** some routine or action before */ const func = callback(); func(); } function foo(){ console.log("I'm a callback and Higher-Order function"); return function(){ console.log("Do something..."); }; } toto(foo);
不,回调不一定是高阶函数。 他们可以。 你可以有一个回调接受另一个函数作为参数。
回调被赋予高阶函数,这可能是导致混淆的原因。 接受另一个函数作为参数的函数是使其被分类为高阶的标准之一。
在我看来,高阶函数是一个函数,它接受另一个函数并用它来抽象一些行为,例如这个c#扩展方法:
public static IEnumerable<T> OrderByProperty<T>(this IEnumerable<T> items, Func<T, object> selector)
{
return items.Select(x => new { o = selector(x), item = x })
.OrderBy(x => x.o)
.Select(x=> x.item);
}
它需要一个函数确定,在排序集合时考虑哪个属性。 样品用法:
var orderedByA = Enumerable.Range(0, 100)
.Select(x=> new Item{
A = x,
B = 100 - x
})
.OrderByProperty(x => x.A);
另一方面,当需要某些异步或长动作时,回调可用于继续应用程序流程,例如
void FirstAsync(){
Task.Run(()=>{
Thread.Sleep(1000);
Console.WriteLine("First executed");
});
}
void Second()
{
Console.WriteLine("Second executed");
}
void FirstV2(Action callback)
{
Task.Run(() =>
{
Thread.Sleep(1000);
Console.WriteLine("First executed");
callback?.Invoke();
});
}
void Main()
{
FirstAsync();
Second();
Thread.Sleep(2000);
FirstV2(Second);
}
上述程序的输出将如下:
Second executed
First executed
First executed
Second executed
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.