Skip to content
快看这页儿写了啥...

谈谈对函数式编程的理解?

题干

  • 函数式编程 Funtional Programming

题解

函数式编程是一种编程范式,它将计算视为数学函数的求值,避免使用可变数据和复杂的状态维护。

函数式编程的一些特性:

  • 无副作用:指调用函数时不会修改外部状态,即一个函数调用 n 次后依然返回同样的结果。

  • 透明引用:指一个函数只会用到传递给它的变量以及自己内部创建的变量,不会使用到其他变量。

  • 不可变变量:函数式编程鼓励使用不可变数据,即数据一旦创建就不可修改。不可变数据指的是一个变量一旦创建后,就不能再进行修改,任何修改都会生成一个新的变量。使用不可变变量最大的好处是线程安全。多个线程可以同时访问同一个不可变变量,让并行变得更容易实现。由于 JavaScript 原生不支持不可变变量,需要通过第三方库来实现。(如 Immutable.js,Mori 等等)

  • 函数是一等公民:在 JS 中,函数是一等公民,可以像其他类型的值一样被传递、赋值和返回。这意味着我们可以将函数作为参数传递给其他函数,将函数赋值给变量,或者从函数中返回一个新的函数。这种特性使得函数式编程在 JS 中得以实现,可以更方便地进行函数的组合和操作。

常见的函数式编程模型:

  • 闭包:如果一个函数引用了自由变量,那么该函数就是一个闭包。什么是自由变量?自由变量是指不属于该函数作用域的变量(所有全局变量都是自由变量,严格来说引用了全局变量的函数都是闭包,但这种闭包并没有什么用,通常情况下我们说的闭包是指函数内部的函数)。
  • 纯函数:纯函数是指相同的输入总会得到相同的输出,并且不会产生副作用的函数。纯函数使得代码更易于测试、调试和组合。
  • 高阶函数:高阶函数是指可以接受其他函数作为参数或返回其他函数作为结果的函数。高阶函数使得代码更抽象和复用。
  • 匿名函数:匿名函数是指没有显式定义名称的函数,它们通常作为高阶函数的参数或返回值使用。匿名函数使得代码更简洁和灵活。
  • 函数递归:函数递归是指一个函数在定义或调用时直接或间接地调用自身的过程。递归可以替代循环,实现无限制的数据结构和算法。
  • 柯里化:柯里化是指将一个多参数的函数转换为一个单参数的函数,并返回一个接受余下参数并返回结果的新函数。柯里化可以实现参数复用、延迟计算和动态生成函数。
  • 函数组合:函数组合是指将多个函数连接起来,形成一个新的函数,使得每个函数的输出都是下一个函数的输入。函数组合可以实现数据流转换、逻辑复合和代码模块化。
  • 惰性求值:惰性求值指延迟计算表达式的值,直到该值被真正需要的时候才进行计算,从而提高程序的性能和效率。使用惰性求值可以避免对大型数据集进行不必要的计算和遍历,只在需要时才进行操作。这可以通过使用生成器函数、迭代器和yield关键字等实现。

相关

什么是柯里化,应用场景

什么是闭包、优缺点、应用场景

什么是高阶函数,应用场景

什么是函数组合,应用场景

什么是惰性求值,应用场景

贡献者

isboyjc's avatar isboyjc

浏览量(PV)  次  ·  独立访客(UV)  人次
不正经的前端 | 八股 · 欢迎 star ⭐