高阶函数与ES6多箭头函数(柯里化)

在阅读react的部分源码时,逐渐接触了许多高阶函数和多箭头函数,想把知识点整理一下

1.高阶函数

所谓高阶函数,就是一个函数就可以接收另一个函数作为参数,或者是返回一个函数。

例如:

javascript

var ADD =function add(a) {

return function(b) {

  return a+b

  }

  }

  调用:ADD(2)(3)即可获得结果


常见的高阶函数有map、reduce、filter、sort等

(1) map

map接受一个函数作为参数,不改变原来的数组,只是返回一个全新的数组

  var arr = [1,2,3,4,5]

  var arr1 = arr.map(item => item = 2)// 输出[1,1,1,1,1]

 (2) reduce

reduce也是返回一个全新的数组。reduce接受一个函数作为参数,这个函数要有两个形参,代表数组中的前两项,reduce会将这个函数的结果与数组中的第三项再次组成这个函数的两个形参以此类推进行累积操作


  var arr = [1,2,3,4,5]

  var arr2 = arr.reduce((a,b)=> a+b)

  console.log(arr2) // 15


(3)filter

filter返回过滤后的数组。filter也接收一个函数作为参数,这个函数将作用于数组中的每个元素,根据该函数每次执行后返回的布尔值来保留结果,如果是true就保留,如果是false就过滤掉(**这点与map要区分**)


  var arr = [1,2,3,4,5]

  var arr3 = arr.filter(item => item % 2 == 0)

  console.log(arr3)// [2,4]


(4)sort

实现对数组中每项按照ASCII码大小进行排序

## ES6多箭头函数实现高阶函数

所谓多箭头函数

指的是如下形式:


(a)=>(b)=>(c)=>{}

等价于

function(a) {

return function(b) {

  return function(c) {

  .....

  }

}

}

2.多箭头函数

根据所查资料得到的结论是:多个连续箭头函数就是 es6的多次柯里化的写法

而所谓柯里化指的是:把接受多个参数的函数变换成接受一个单一参数的函数,并且返回(接受余下的参数而且返回结果的)新函数的技术

=>n 个连续箭头组成的函数实际上就是柯里化了 n - 1次。前 n - 1 次调用,其实是提前将参数传递进去,并没有调用最内层函数体,最后一次调用才会调用最内层函数体,并返回最内层函数体的返回值。然后依次向外层函数执行

举例:

funcs.reduce((left, right) => (...args) => right(left(...args)));


关于柯里化的部分资料来源于:

https://www.cnblogs.com/xueandsi/p/6032578.html

你可能感兴趣的:(高阶函数与ES6多箭头函数(柯里化))