JavaScript函数式编程教程(入门+进阶+实用技巧)
本文面向前端开发者,系统讲解JavaScript函数式编程基础与进阶技巧。内容涵盖高阶函数、回调函数、数组操作方法(map、filter、reduce)、闭包、函数组合、柯里化等核心概念,并通过实战案例展示如何在项目中应用函数式编程,提高代码可读性、可维护性和复用性。
正文教程
一、高阶函数(Higher-Order Function)
定义:接受函数作为参数或返回函数的函数
function greet(name, formatter) {
return "Hello, " + formatter(name);
}
function upperCaseName(name) { return name.toUpperCase(); }
console.log(greet("Tom", upperCaseName)); // 输出 Hello, TOM
技巧:高阶函数增强函数灵活性,可用于回调、函数组合
二、数组函数式操作
map
const nums = [1,2,3,4];
const squared = nums.map(x => x * x);
console.log(squared); // 输出 [1,4,9,16]
filter
const evenNums = nums.filter(x => x % 2 === 0);
console.log(evenNums); // 输出 [2,4]
reduce
const sum = nums.reduce((acc, cur) => acc + cur, 0);
console.log(sum); // 输出 10
技巧:函数式方法链式调用可简化数据处理
三、回调函数(Callback)
function fetchData(callback){
setTimeout(() => {
callback("数据加载完成");
}, 1000);
}
fetchData(msg => console.log(msg));
技巧:回调函数是异步处理的重要手段,但需注意“回调地狱”
四、闭包(Closure)
function makeCounter() {
let count = 0;
return function() {
count++;
return count;
}
}
const counter = makeCounter();
console.log(counter()); // 输出 1
console.log(counter()); // 输出 2
技巧:闭包可保存状态,实现数据封装
五、函数组合(Function Composition)
const add = x => x + 1;
const square = x => x * x;
const compose = (f, g) => x => f(g(x));
const addThenSquare = compose(square, add);
console.log(addThenSquare(2)); // 输出 9
技巧:组合函数提升函数复用性和逻辑清晰度
六、柯里化(Currying)
const multiply = a => b => a * b;
const double = multiply(2);
console.log(double(5)); // 输出 10
技巧:柯里化适合预置参数,提高函数复用
七、实用技巧总结
使用高阶函数和数组函数式方法简化代码逻辑
避免过度嵌套回调,使用Promise或async/await优化异步
闭包用于状态管理和函数封装
函数组合和柯里化提高函数复用性
将函数式编程与项目实践结合,提高代码可维护性