什么是高阶函数:
如果一个函数符合下面2个规范中的任何一个,那该函数就是高阶函数
- 若A函数,接收的参数是一个函数,那么A就称为高阶函数
- 若A函数,调用的返回值依然是一个函数,那么A就可以称为高阶函数
常见的高阶函数:
- filter/map/reduce/sort
- Promise/bind
什么是柯里化:
- 通过函数调用继续返回函数的形式,实现多次接收参数最后统一处理的函数编码形式
- 常见应用:参数复用,延迟计算
举例:
比如我们有个拼接接口地址的函数
function getUrl(service,context,api){
return service + context + api;
}
let loginUrl = getUrl('http://localhost:8080/','auth','/login')
let logoutUrl = getUrl('http://localhost:8080/','auth','/logout')
使用柯里化达到参数复用:
function getUrl(service,context,api){
return service + context + api;
}
function curry(fn){
let args = Array.prototype.slice.call(arguments,1);
return function(){
let innerArgs = Array.prototype.slice.call(arguments);
let finalArgs = args.concat(innerArgs);
if(finalArgs.length < fn.length){ //fn.length为函数的参数个数
return curry.call(this,fn,...finalArgs)
}else{
return fn.apply(null,finalArgs)
}
}
}
var getAuthUrl = curry(getUrl,'http://localhost:8080/','auth');
let loginUrl = getAuthUrl('/login')
let logoutUrl = getAuthUrl('/logout')
网友评论