函数式编程是一种编程范式,它将计算机程序视为数学函数的计算。在函数式编程中,函数是一等公民,可以像变量一样传递和使用。函数式编程强调函数的纯洁性和不可变性,避免副作用和可变状态。
在JavaScript中,函数是一等公民,可以作为参数传递给其他函数,也可以作为返回值。因此,JavaScript天生具备函数式编程的特性。
// 纯函数
function add(a, b) {
return a + b;
}
// 不可变性
const arr1 = [1, 2, 3];
const arr2 = arr1.concat(4);
// 高阶函数
function map(fn, arr) {
const result = [];
for (let i = 0; i < arr.length; i++) {
result.push(fn(arr[i]));
}
return result;
}
// 函数组合
const addOne = x => x + 1;
const double = x => x * 2;
const addOneAndDouble = compose(double, addOne);
// 柯里化
function curry(fn) {
return function curried(...args) {
if (args.length >= fn.length) {
return fn.apply(this, args);
} else {
return function(...args2) {
return curried.apply(this, args.concat(args2));
}
}
}
}
function multiply(a, b, c) {
return a * b * c;
}
const curriedMultiply = curry(multiply);
const result = curriedMultiply(2)(3)(4);