- Hands-On Functional Programming with TypeScript
- Remo H. Jansen
- 280字
- 2021-07-02 14:03:11
Higher-order functions
A higher-order function is a function that does at least one of the following:
- Takes one or more functions as arguments
- Returns a function as its result
Higher-order functions are some of the most powerful tools that we can use to write JavaScript in a functional programming style. Let's look at some examples.
The following code snippet declares a function named addDelay. The function creates a new function that waits for a given number of milliseconds before printing a message in the console. The function is considered a higher-order function because it returns a function:
function addDelay(msg: string, ms: number) {
return () => {
setTimeout(() => {
console.log(msg);
}, ms);
};
}
const delayedSayHello = addDelay("Hello world!", 500);
delayedSayHello(); // Prints "Hello world!" (after 500 ms)
The following code snippet declares a function named addDelay. The function creates a new function that adds a delay in milliseconds to the execution of another function that is passed as an argument. The function is considered a higher-order function because it takes a function as an argument and returns a function:
function addDelay(func: () => void, ms: number) {
return () => {
setTimeout(() => {
func();
}, ms);
};
}
function sayHello() {
console.log("Hello world!");
}
const delayedSayHello = addDelay(sayHello, 500);
delayedSayHello(); // Prints "Hello world!" (after 500 ms)
Higher-order functions are an effective technique for abstracting a solution for a common problem. The preceding example demonstrates how we can use a higher-order function (addDelay) to add a delay to another function (sayHello). This technique allows us to abstract the delay functionality and keeps the sayHello function, or other functions, agnostic of the implementation details of the delay functionality.
- Java異步編程實(shí)戰(zhàn)
- DevOps for Networking
- Getting Started with CreateJS
- Mastering Ubuntu Server
- Unity Shader入門精要
- Spring+Spring MVC+MyBatis整合開發(fā)實(shí)戰(zhàn)
- Azure Serverless Computing Cookbook
- Orleans:構(gòu)建高性能分布式Actor服務(wù)
- Mastering Apache Camel
- 分布式數(shù)據(jù)庫HBase案例教程
- 編程的原則:改善代碼質(zhì)量的101個(gè)方法
- 和孩子一起學(xué)編程:用Scratch玩Minecraft我的世界
- Android熱門應(yīng)用開發(fā)詳解
- Python全棧開發(fā):數(shù)據(jù)分析
- 亮劍C#項(xiàng)目開發(fā)案例導(dǎo)航