高阶函数 (Higher-Order Functions)
高阶函数有两个特征:
- 接受一个或多个函数作为参数。
- 返回一个函数。
这种能力使函数更可组合、可复用,并能抽象出通用控制流或行为。
示例:接受函数作为参数
下面实现了一个简单的 filter,它接受数组和判定函数:
js
function filter(array, fn) {
let results = [];
for (let i = 0; i < array.length; i++) {
if (fn(array[i])) {
results.push(array[i]);
}
}
return results;
}
const isEven = n => n % 2 === 0;
console.log(filter([1, 2, 3, 4, 5], isEven)); // [2, 4]示例:返回函数
返回函数可以用来部分应用或生成特定行为的函数:
js
function createAdder(x) {
return function(y) {
return x + y;
};
}
const add5 = createAdder(5);
console.log(add5(10)); // 15实际应用:只执行一次的包装器 once
高阶函数也常用于控制函数执行次数、缓存结果等:
js
function once(fn) {
let done = false;
return function() {
if (!done) {
done = true;
return fn.apply(this, arguments);
}
};
}
const initialize = once(() => {
console.log('初始化完成!(只应该打印一次)');
});
initialize();
initialize();小结
- 高阶函数是函数式编程的基础,用来抽象行为、实现组合和复用。
- 常见模式包括
map/filter/reduce、柯里化、函数装饰器(decorator)等。