1. 高阶函数
函数可以作为另一个函数的参数或者返回值
最常用的高阶函数想必是map和reduce 如下:
let arr=[1,2,3,4]
let arrTemp= arr.map((v)=>v+1)
let arrResult = arrTemp.reduce((sum,v)=>{
return sum+=v
})
console.log("arrTemp",arrTemp,"arrResult",arrResult) //[2, 3, 4, 5], 14
map,reduce更多细节可以参考MDN
说到高阶函数想到另外一个经常会用到的知识点–柯里化
2. 柯里化
可以理解为函数分布传递参数,把接受多个参数的函数变换成接受一个单一参数的函数,并且返回接受余下的参数,也就是说逐步传参,逐步缩小函数的适用范围,逐步求解的过程。
function add(a,b){
return a+b
}
let add = function(a){
return function(b){
return a + b;
}
};
add(1,2)
add(1)(2)
柯里化三个特性
- 参数复用
- 提前返回
- 延迟计算/运行
高阶函数里面的柯里化
function curry(x) {
var _curry = function(y) {
return curry(x + y);
}
_curry.toString = function () {
return x;
};
return _curry;
}
3. 高阶组件( Higher Order Component 简称:HOC)
是接收一个组件作为参数,并返回一个新组件的函数,总的来说就是每个组件以及扩展组件的函数只关心自己的事情,被扩展的组件也不关心别人会怎么扩展它
HOC既不会修改输入的组件,也不会使用使用继承性去拷贝输入组件的行为,相反HOC通过包裹它在一个容器组件来组合原始组件,HOC是一个纯函数没有任何副作用。也就是说HOC可以往被扩展的组件注入自己的东西,但是不允许去改动被扩展组件原有的一切东西。
更多细节可以参考React官方文档