函数式编程是一种编程范式,其中程序构造是通过出入函数的方式来实现的。这意味着程序会包含许多纯函数,并通过函数复合与应用来构建功能。
JavaScript 支持函数式编程,主要有以下特点:
- 纯函数:输出只依赖于输入,不受外部环境影响,多次调用返回相同结果。
例如:
function sum(a, b) {
return a + b;
}
- 不变性:函数不应该改变外部状态,应返回新的值。
例如:
function addTodo(todos, newTodo) {
return [...todos, newTodo];
}
- 处理副作用:通过函数式组合优雅地处理副作用。
例如:
function withLogging(f) {
return function(x) {
console.log(x);
return f(x);
}
}
const add = (a, b) => a + b;
const addWithLogging = withLogging(add);
addWithLogging(1, 2); // Prints 3, returns 3
- 一等公民:函数可以作为参数传递,也可以作为返回值。
例如:
function higherOrder(f) {
return f(1);
}
higherOrder(n => n + 1); // Returns 2
- 局部状态:通过闭包实现局部状态。
例如:
function makeCounter() {
let count = 0;
return {
increment() {
count++;
},
decrement() {
count--;
},
get() {
return count;
}
}
}
const counter = makeCounter();
counter.increment();
counter.get(); // 1
所以,总结来说 JavaScript 函数式编程主要有以下特点:
- 纯函数:输出只依赖输入,多次调用返回相同结果。
- 不变性:不改变外部状态,返回新值。
- 处理副作用:通过函数组合处理副作用。
- 一等公民:函数可以作为参数和返回值。
- 局部状态:通过闭包实现局部状态。