什么是高阶函数?常见的高阶函数有哪些?
Javascript 285
高阶函数:就是一个函数的参数是函数,或者返回值是函数,满足其中一个就是高阶函数
开闭原则:对扩展是开发的,对修改是封闭的。
如果一个函数符合下面2个 规范中任何一个,那该函数就是高阶函数
1、若a函数,接收的参数是一个函数,那么a就可以称之为高阶函数
2、若a函数,调用的返回值依然是一个函数,那么a就可以称之为高阶函数。
<script>
// 这是一个高阶函数,f是传入的函数作为参数。
function add(x,y,f){
return f(x)+f(y)
}
let num=add(2,-2,Math.abs);
console.log(num)//4
</script>
常见的高阶函数有:Promise、setTimeout、arr.map()、filter、reduce等等。
//map:一般用于操作数组集合,遍历操作用
function f(x){
return x*x
}
let arr=[1,2,3,4,5];
let newArr=arr.map(f);
console.log(newArr);//[1, 4, 9, 16, 25]
//reduce:数组元素计算。
//如:这是数组求和,将元素全部加起来,相当于1+2+3+4+5。
let arr=[1,2,3,4,5];
let num=arr.reduce(function(x,y){
return x+y
})
console.log(num);//15
//筛选掉空字符串、null、undefined:
//trim()是去掉首尾的空格
let arr=[1,0,'2','',0,'3',null,undefined,'']
let r=arr.filter(function(s){
if(s!=null&&s!=undefined){
if((typeof s=="string"&&s.trim()!='')||(typeof s=='number')){
return true;
}else{
return false;
}
}
})
console.log(r);
//sort:数组重排序。返回同一个数组对象。根据ascii码进行排序。
//x-y:从小到大
//y-x:从大到小
//重排序的数组还是原来的数组。
let arr =[5,23,7,2,4,5,6];
let newArr1 = arr.sort(function(x,y){
return x - y;//从小到大
})
console.log(newArr1);//[2, 4, 5, 5, 6, 7, 23]
let newArr2=arr.sort(function(x,y){
return y-x;//从大到小
})
console.log(newArr2);// [23, 7, 6, 5, 5, 4, 2]
console.log(arr===newArr1,arr===newArr2);//true true