I'm trying to understand callback and higher-order functions but there's a description from a blog post, Understand JavaScript Callback Functions and Use Them , that confuses me, the implication being that they are one and the same:
A callback function, also known as a higher-order function,...
It was repeated verbatim on a Quora answer to the question asking about What is a simple explanation of higher order functions and callbacks in JavaScript? .
It doesn't make sense to me. From what I understand, a higher-order function takes in or returns other functions and a callback function is the function being passed/taken in , so how can it be both at the same time? Is there something that I'm not understanding about that description?
A callback function is a function passed into another function as an argument, which is then invoked inside the outer function to complete some kind of routine or action.
A function that returns a function called Higher-Order Function
A callback function is not a Higher-Order Function, unless it is a function that returns a function.
Simple callback:
function toto(callback){ /** some routine or action before */ callback(); } function foo(){ console.log("I'm a simple callback"); } toto(foo);
Simple Higher-Order Function
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();
Callback that is also a Higher-Order Function:
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);
No, a callback is not necessarily a Higher Order Function. They can be though. You could have a callback that accepts another function as an argument.
Callbacks are given to Higher Order Functions, which may be what's leading to the confusion. A function accepting another function as an argument is one of the criteria that causes it to be classified as Higher Order.
In my opinion, higher order function is a function that takes another function and uses it to abstract some behaviour, eg this c# extension method:
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);
}
it takes a function determining, which property take into account while sorting collection. Sample usage:
var orderedByA = Enumerable.Range(0, 100)
.Select(x=> new Item{
A = x,
B = 100 - x
})
.OrderByProperty(x => x.A);
Callbacks on the other hand can be used to continue application flow when some async or long action is necessary, eg
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);
}
Output of program above will be like:
Second executed
First executed
First executed
Second executed
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.