JavaScript中的高阶函数:让我们深入了解一下!
JavaScript
充满了各种巧妙的特性,而高阶函数(HOFs)是非常酷的特性之一。无论你是处理数据、构建UI,还是设计算法,高阶函数(HOFs)会是你最好的帮手。那,HOFs是什么呢?🤔
一个高阶函数是指这样的函数:它要么接受一个或多个函数作为参数,要么返回一个函数。
- 接受另一个函数作为参数。
- 并且返回一个函数。
简单吧!好了,不讲那些理论了,咱们来看看一些有趣的例子 🔥
原文中带有星号(*),此处保留原文形式:此处省略
1️⃣ 把函数当参数传递假设你想对数组中的每个元素执行一个函数操作,这时,.map()
这个方法就派上用场了,它是 JavaScript 中高阶函数中的明星。
比如:
const numbers = [1, 2, 3, 4, 5];
// 使用 `map` 方法将每个数字乘以 2
const doubled = numbers.map(num => num * 2);
// 将每个数字乘以2
console.log(doubled); // [2, 4, 6, 8, 10]
全屏模式 退出全屏
💡 它是怎么工作的
.map()
接收一个函数(如num => num * 2
)作为参数。-
它会把该函数应用到数组中的每个元素上。
-
- *
有时候,一个函数需要动态生成另一个函数。🤯
柯里化(Currying) 就是一个经典例子!
柯里化(Currying)就是一个经典例子!
例如:比如这种情况
const multiplyBy = multiplier => number => number * multiplier;
// 创建特定的倍数函数
const double = multiplyBy(2);
const triple = multiplyBy(3);
// 这里的函数使用了函数式编程的概念,通过一个乘数生成特定的倍数函数
console.log(double(5)); // 10
console.log(triple(5)); // 15
全屏显示 退出全屏
💡 为什么?
这让你能创建灵活且可重复使用的逻辑。你只需编写一次逻辑,就能生成酷炫的自定义函数。🚀
3️⃣ 玩转过滤
另一个HOF英雄是 .filter()
。它让你根据条件从数组中筛选出想要的项
例子:
const words = ["apple", "banana", "kiwi", "apricot"];
// 筛选出以 'a' 开头的单词
const startsWithA = words.filter(word => word.startsWith("a"));
console.log(startsWithA); // 控制台输出(startsWithA);
全屏,退出全屏
💡 小贴士:结合使用 .map()
和 .filter()
来像高手一样进行链式操作。
四、减少你的烦恼
可以说,.reduce()
是一个万能助手。它能将数组中的所有元素处理成一个单一的值。
例子:
const prices = [10, 20, 30];
// 注释:计算价格总和
const total = prices.reduce((sum, price) => sum + price, 0);
console.log(total); // 输出总和:60
切换到全屏模式 退出全屏
💡 用例:无论是求和还是将数组扁平化,.reduce()
都是你的得力助手。
- 回调函数与事件监听器
像 addEventListener
这样的函数也是高阶函数,因为它们接受回调函数作为参数。
例子:
document.querySelector("button").addEventListener("click", () => {
console.log("按钮被点击了🚀");
});
全屏 退出全屏
💡 这是怎么做到的? 你传递给 addEventListener
的函数会在事件(例如点击)发生时被执行。
🤔 难题:你能猜出结果吗?
const createCounter = () => {
let count = 0;
return () => ++count;
};
const counter1 = createCounter();
const counter2 = createCounter();
console.log(counter1()); // 输出 1
console.log(counter1()); // 输出 2
console.log(counter2()); // 输出 1
console.log(counter2()); // 输出 2
切换到全屏 退出全屏
来猜猜吧!在评论区留言哦!🔥
高阶函数可以让代码更清晰、强大且易于维护。掌握它们,你很快就能够像大师一样使用JavaScript 🧙♂️!
共同学习,写下你的评论
评论加载中...
作者其他优质文章