在阅读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