高阶函数是什么?查了很多资料是这么说的:高阶函数就是传入的参数列表中包含函数的函数。我理解东西追求直观,所以画了张图。
举个栗子:我现在定义一个函数fnSum求两个数的和
function fnSum(x1,x2){
return x1+x2;
}
现在我想求两个数绝对值的和,我可以直接在函数fnSum里面处理。还有一个方法就是利用高阶函数写:
function fnSum(x1,x2,fn){
return fn(x1)+fn(x2);
}
调用的时候:fnSum(3,-9,Math.abs) //结果为12
这就是高阶函数的用法,这样写的好处显而易见。fn是一个函数,它可以提前对参数做处理,但是写fnSum这个函数的时候,我们不清楚处理的流程具体是什么,所以留待调用的人去实现。如果想先求绝对值再计算就传求绝对值函数,如果想先平方再计算就传求平方函数。
map也是高阶函数的一员,它的作用是遍历数组,并且返回一个新的数组,新的数组里的每个元素都执行map传入的函数。画图说。引用廖雪峰老师的一张图。例如为数组中的每个元素求平方,使用map写
arr2=[1,2,3].map(f)
console.log(arr2)
function f(x){
return x*x;
}
这里返回的一个新数组arr2,原数组没有变动,所以使用map高阶函数是不会对原来的数组造成影响的。