使用 JS 进行函数式编程

2025-06-07

使用 JS 进行函数式编程

函数式编程是一种为处理纯数学函数而设计的编程范式。该范式专注于编写更加复合和纯粹的函数。

函数式编程是一种特殊的声明式编程

首先,你需要了解声明式编程和命令式编程的区别,它们是 JavaScript 的范式或组织代码的技术。
在命令式编程中,我们指定描述流程控制的程序逻辑。

let name = "Ali";
let Greeting = "Hi, ";
console.log(Greeting , name);  // Hi,  Ali
Enter fullscreen mode Exit fullscreen mode

相反,声明式编程我们指定程序逻辑而不描述流程控制

const Greeting = (name) => {
    console.log('Hi, ',name);
}

Greeting("Ali"); // Hi, Ali
Enter fullscreen mode Exit fullscreen mode

因此,正如你所注意到的,函数式编程注重代码的整洁、有序和重用,通过

  1. 纯函数:简单且可复用。它们完全独立于外部状态(全局变量),易于重构、测试和调试。纯函数是指给定相同输入,始终返回相同输出的函数。
const add = (x,y) => x+y;
add(5,4) // 9
Enter fullscreen mode Exit fullscreen mode

Math.random是非纯函数的一个常见例子。
非纯函数的另一个例子:

let count = 0;
const incCount = (value) => count += value;
Enter fullscreen mode Exit fullscreen mode
  1. 高阶函数:它们可以接收一个函数作为参数(回调),也可以返回一个函数,它们对于编写复杂的函数非常有帮助。
const animals = ["Cat", "Dog", "Elephant",
 "Giraffe", "Lion", "Monkey"];
const zooWithoutCat = animals.filter(animal => animal !== "Cat");
Enter fullscreen mode Exit fullscreen mode

注意 ==> 不要迭代,您可以使用高阶函数,如 map、filter、reduce、find...

let numbers = [2, 4, 6];
let numbersX2 = numbers.map(number => number*2); // [ 4, 8, 12 ]
Enter fullscreen mode Exit fullscreen mode
  1. 避免可变性:您必须避免更改数据。
let num1 = [1, 2, 3];
let num2 = num1;
Enter fullscreen mode Exit fullscreen mode

num2 的任何变化都会影响 num1(可变性),我们可以通过使用高阶函数或扩展运算符来解决这个问题。

let num2 = [...num1];
Enter fullscreen mode Exit fullscreen mode
  1. 持久数据结构,实现高效的不变性

将所有数据视为不可变的、永远不会改变的。

不可变性的问题在于,你需要复制所有数据才能进行微小的更改,这会给你带来效率问题,因为你将使用大量空间。那么解决方案是什么呢?
别担心,
有很多 JS 库可以解决这个问题,例如:

  • Immutable.js
  • 下划线
  • Lodash
  • Ramda 它们依赖于结构共享思想图片描述注意黄色方块是 2 个变量之间共享的。

感谢您的时间,
您可以在 LinkedIn 上添加我:链接

文章来源:https://dev.to/trezeguit/function-programming-with-js-1bgd
PREV
成为更优秀的前端开发人员的 5 个可行步骤
NEXT
如何为 GitHub 页面设置 Google 域名