function makeJuice(size) { return `A cup of ${size} juice`; } function makeCoffee(size) { return `A cup of ${size} coffee`; }然后,我们定义一个高阶函数 orderDrink,它接受一个制作饮料的函数 makeDrink 和一个大小参数 size:
function orderDrink(makeDrink, size) { return makeDrink(size); }这样,我们就可以通过传递不同的制作饮料的函数和大小参数,来制作不同的饮料:
console.log(orderDrink(makeJuice, 'large')); // 输出: A cup of large juice console.log(orderDrink(makeCoffee, 'small')); // 输出: A cup of small coffee在这个例子中,orderDrink 是一个高阶函数,它接受一个函数 makeDrink 和一个参数 size。orderDrink 调用 makeDrink,并传入 size 作为参数,然后返回制作好的饮料。我们定义了两个简单的函数 makeJuice 和 makeCoffee,分别制作果汁和咖啡。通过将这两个函数作为参数传递给 orderDrink,我们可以制作不同大小的饮料,而无需修改 orderDrink 函数本身。
在 JavaScript 中,有很多内置的高阶函数,特别适用于数组的操作和转换。
Array.prototype.map
map 函数通过对原数组中的每个元素调用提供的回调函数,创建一个新数组。const grades = [70, 85, 90, 78, 92]; // 堆代码 duidaima.com const improvedGrades = grades.map(grade => grade + 10); console.log(improvedGrades); // 输出: [80, 95, 100, 88, 102]在这个例子中,map 被用来创建一个新数组 improvedGrades,通过对 grades 数组中的每个成绩加10分。回调函数 grade => grade + 10 被应用到每个元素上,结果存储在新数组的对应位置。
const ages = [12, 18, 25, 16, 30]; const adults = ages.filter(age => age >= 18); console.log(adults); // 输出: [18, 25, 30]在这个例子中,filter 被用来创建一个新数组 adults,通过对 ages 数组中的每个年龄进行成年检查。回调函数 age => age >= 18 被应用到每个元素上,只有通过检查的元素才会被包含在新数组中。
const prices = [100, 200, 300, 400, 500]; const totalPrice = prices.reduce((total, price) => total + price, 0); console.log(totalPrice); // 输出: 1500在这个例子中,reduce 被用来将 prices 数组缩减为一个单个值 totalPrice,通过对每个元素执行累加操作。回调函数 (total, price) => total + price 被应用到每个元素上,total 是累加器,price 是当前元素,初始值为 0。
// 定义一个自定义高阶函数 transformArray function transformArray(arr, transformFunc) { const transformedArray = []; // 创建一个空数组用于存储转换后的结果 for (let i = 0; i < arr.length; i++) { // 遍历输入数组的每个元素 transformedArray.push(transformFunc(arr[i])); // 将转换后的元素添加到新数组中 } return transformedArray; // 返回转换后的新数组 } // 定义一个数字数组 const numbers = [1, 2, 3, 4, 5]; // 使用 transformArray 函数将每个数字乘以 2 const doubledNumbers = transformArray(numbers, num => num * 2); // 输出转换后的数组 console.log(doubledNumbers); // 输出: [2, 4, 6, 8, 10]在这个例子中,transformArray 是一个高阶函数,它接受一个数组 arr 和一个转换函数 transformFunc 作为参数。函数内部创建了一个新数组 transformedArray,通过对输入数组 arr 的每个元素应用 transformFunc,将转换后的结果存储在新数组中,最后返回新数组。