函数式编程(三):函数柯里化

281 阅读3分钟

arity(参数个数)是函数所需的形参的数量。 函数柯里化(Currying)意思是把接受多个 arity 的函数变换成接受单一 arity 的函数。

换句话说,就是重构函数让它接收一个参数,然后返回接收下一个参数的函数,依此类推。

柯里化在不能一次为函数提供所有参数情况下很有用因为它可以将每个函数的调用保存到一个变量中,该变量将保存返回的函数引用,该引用在下一个参数可用时接受该参数。 下面是使用柯里化函数的例子:

//例子1
function add(x) {
  return function(y) {
    return function(z) {
      return x + y + z;
    };
  };
}
add(10)(20)(30);

//例子2
function add(x) { 

return y => z => x + y + z;

} 
add(10)(20)(30);


//例子3
function unCurried(x, y) {
  return x + y;
}

function curried(x) {
  return function(y) {
    return x + y;
  }
}

const curried = x => y => x + y

curried(1)(2)

小结

函数式编程到此暂时完结,我们来复习一下他的两个原则和常用函数:

  • 不要更改变量或对象 - 创建新变量和对象,并在需要时从函数返回它们。 提示:使用类似 const newArr = arrVar 的东西其中 arrVar 是个数组,只会创建对现有变量的引用,而不是副本。 所以更改 newArr 中的值会同时更改 arrVar 中的值

  • 声明函数参数 - 函数内的任何计算仅取决于参数,而不取决于任何全局对象或变量

  1. filter 接收一个回调函数,将回调函数内的逻辑应用于数组的每个元素,新数组包含根据回调函数内条件返回 true 的元素`

  2. map方法是迭代数组中每一项的方式之一。 在对每个元素应用回调函数后,它会创建一个新数组(不改变原来的数组)。 它这样做时没有改变原始数组。

  3. reduce 方法分析数据:

  • 第一个参数称为叠加器,它是上一次迭代中回调函数的返回值,
  • 第二个参数是当前正在处理的数组元素
  • 第三个参数是该参数的索引
  • 第四个参数是在其上调用 reduce 方法的数组
  1. every 方法用于检测数组中所有元素是否都符合指定条件。 如果所有元素满足条件,返回布尔值 true,反之返回 false

  2. some 方法用于检测数组中任何元素是否满足指定条件。 如果有一个元素满足条件,返回布尔值 true,反之返回 false

  3. 使用 sort 方法按字母顺序给数组排序, sort 方法会产生改变原始数组中元素顺序的副作用

  4. slice 方法可以从已有数组中返回指定元素。slice 返回一个新数组,不会修改原始数组。

  5. concat 方法,这是一种在不改变原始数组的前提下,将数组组合成新数组的方法

  6. split 方法将一个字符串分割成一个字符串数组

  7. join方法用来把数组中的所有元素放入一个字符串。 并通过指定的分隔符参数进行分隔。

  8. 函数柯里化

如果不清楚前2章的可以移步我的专栏,谢谢~ juejin.cn/column/7078…