文章目录 函数式编程范式 不可变性(Immutable) 纯函数(Pure Functions) 函数作为一等公民(First-Class Functions) 高阶函数(Higher-Order Functions 函数组合(Function Composition)或函数柯里化(Function Currying) 函数式编程优势 函数式编程缺陷 函数式工具实践
函数式编程范式
不可变性(Immutable)
数据是不可变的,即一旦创建就无法更改。这意味着对数据的所有操作都是返回新数据,而不是修改原始数据
const arr = [ 1 , 2 , 3 ] ;
const newArr = arr. concat ( 4 ) ;
纯函数(Pure Functions)
纯函数是指给定相同的输入,始终返回相同的输出,并且没有副作用(不修改外部状态,也不依赖于外部状态)
function add ( x, y ) { return x + y;
}
函数作为一等公民(First-Class Functions)
函数是一等公民意味着函数可以像其他数据类型一样被传递、返回和存储。 例如,可以将函数作为参数传递给另一个函数,或者将函数作为返回值返回
function applyFunction ( fn, value ) { return fn ( value) ;
} function square ( x ) { return x * x;
} console. log ( applyFunction ( square, 5 ) ) ;
function createAdder ( x ) { return function ( y ) { return x + y; } ;
} const addFive = createAdder ( 5 ) ;
console. log ( addFive ( 10 ) ) ;
高阶函数(Higher-Order Functions
高阶函数是指接受一个或多个函数作为参数,或返回一个函数作为结果的函数。例如,map、filter 和 reduce 都是高阶函数
function map ( array, fn ) { let result = [ ] ; for ( let i = 0 ; i < array. length; i++ ) { result. push ( fn ( array[ i] ) ) ; } return result;
} const numbers = [ 1 , 2 , 3 ] ;
const squared = map ( numbers, ( x ) => x * x) ;
console. log ( squared) ;
函数组合(Function Composition)或函数柯里化(Function Currying)
function compose ( f, g ) { return function ( x ) { return f ( g ( x) ) ; } ;
} const addOne = ( x ) => x + 1 ;
const double = ( x ) => x * 2 ; const addOneAndDouble = compose ( double, addOne) ;
console. log ( addOneAndDouble ( 5 ) ) ;
函数式编程优势
原子化粒度:由函数组成一个个单元 更易于测试:纯函数没有副作用,它们只依赖于输入参数,因此更容易编写测试用例和验证函数的正确性 易于并行和并发编程:不可变性和纯函数使得并行计算变得更加安全,因为多个线程可以安全地并行执行不依赖于共享状态的纯函数 函数复用:高阶函数和函数组合使得函数可以复用和组合,减少了代码重复,提高了代码的复用性
函数式编程缺陷
可读性:高阶函数会降低可读性 闭包:函数式编程会产生大量的闭包
函数式工具实践
Lodash/fp: 提供函数式编程风格的 Lodash 函数。 Ramda: 专注于函数式编程的 JavaScript 库。