2020-11-09(记录今天在线学习知识)
1、关于高阶函数的一些事
tips: 在 JavaScript 中,函数为一等公民,所谓的 ‘一等公民’,指的是函数与其他数据类型一样,处于平等地位,可以赋值给其他变量,也可以作
为参数,传入另一个函数,或作为其他函数的返回值。
高阶函数定义:(至少满足下列一个条件的函数)
1.1:接受一个或多个函数作为输入。
1.2:输出一个函数。
接收一个或多个函数作为输入,即函数作为参数传递。这种应用场景,比如,Array.prototype.map() 和 Array.prototype.filter()高阶函数
eg: Array.prototype.map
const array = [1,2,3,4];
const map = array.map(x=>x*2);//这里会输出 [2,4,6,8]
const filters = ['aaaaaa','bbbbb','ccc','dddd'];
const result = filters.filter(x=>x.length>=5);//这里会输出 filters数组里面长度>=5的值 ['aaaaaa','bbbbb']
而输出一个函数,即调用高阶函数之后,会返回一个新的函数。常见的debounce ,throttle (防抖,节流函数)
2、函数组合
//函数组合就是将两个或两个以上的函数组合生成一个新函数的过程:
const compose = function(...funs){ //f,g 都是函数
return function(x){ //x 是组合生成新函数的参数
return funs.reduce(function(arg,fn){
return fn(arg);
},x)
}
}
2.1、函数组合的作用
function loweCase(params){
return params && typeof params === 'string' ? params.toLowerCase() : params //这个是转小写字母
}
...
//还有很多,如 转大写字母,去除空格,截取字符串
function trim(params){
return typeof params === 'string'?params.trim():params
}
function split(params,delimiter=','){
return typeof params === 'string'? params.split(delimiter):split
}
const trimLowerCaseSplit = compose(trim,lowerCase,split);
trimLowerCaseSplit('a,b,C');//输出
3、柯里化
柯里化(currying) 是一种处理函数中含有多个参数的方法,并在只允许单一参数的框架中使用这些函数。
与柯里化相反的是 Uncurrying,一种使用匿名单参数函数来实现多参数函数的方法。比如:
const func = function(a){
return function(b){
return a*a + b*b
}
}
func(3)(4);
柯里化作用:
3.1、参数复用
3.2、延迟计算/运行
柯里化实现:
function curry(func){
return function curried(...args){
if(args.length>=func.length){
return func.apply(this,args);
}else{
return curried.apply(this,args.concat(args2));
}
}
}
4、偏函数
//写到这里,突然觉得自己有点迷,因为实际开发中没有用到这个...突然有点香菇了...
偏函数概念: 是指固定一个函数的某些参数,然后产生另一个更小元的函数。而所谓的元是指函数参数的个数,比如含有一个参数的函数被称为一元函数
偏函数用于固定一个或多个参数,并返回一个可以接收剩余参数的函数。
function partial(fn){
let args = [].slice.call(arguments,1);
return function(){
const newArgs = args.concat([].slice.call(arguments));
return fn.apply(this,newArgs);
}
}
以及还有惰性函数,缓存函数等。
参考链接:https://juejin.im/post/6892886272377880583
如果快乐太难,那祝你平安。