定义
高阶函数指操作函数的函数。高阶函数需要满足两个条件:函数可以作为参数被传递;函数可以作为返回值输出。
参数传递
日常开发中,把函数作为参数传递是很常见的情况,通常为了分离出容易变化的业务逻辑,会这部分逻辑放到一个函数参数里。
【回调函数】一个常见的场景,在使用ajax请求数据时,通常把一个回调函数作为参数传给ajax请求的方法,目的是待请求完成后方便外部函数操作数据。
var getUserData = function (id, callback){
$.ajax('http://example.com/getUserData?id='+id, function(data){
if(typeof callback === 'function'){
callback(data)
}
})
}
getUserData(100, function(data){
// todo
})
getUserData(200, function(data){
// todo
})
【数组排序】数组的sort()方法也是一个高阶函数,它接收一个函数作为参数,方便我们自定义排序规则
// 从小到大排序
[ 1, 3, 2 ].sort( function( a, b ){
return a - b;
})
// [1,2,3]
// 从大到小排序
[ 1, 3, 2 ].sort( function( a, b ){
return b - a;
})
// [3,2,1]
返回值输出
函数执行后返回一个可执行函数,这也意味着函数的运算过程是可持续的。
【示例】mapper()函数执行完成后返回一个新函数,这个新函数将一个数组映射到另一个使用该函数的数组上。
function mapper(fn) {
return function(arr) {
return Array.prototype.map.call(arr, fn)
}
}
var increment = function(num) {
return num + 1
}
var result = mapper(increment)([1,2,3])
console.log(result) // [2,3,4]