高阶函数的应用
- 关于高阶函数:
参数为函数或返回值为函数的函数被称为高阶函数。
1,AOP面向切片编程
aop的主要作用是将与核心业务无关的逻辑代码抽离出来。保持核心业务的纯净和高内聚。其实就是
给原函数增加一层,不管也不影响原函数的实现,直接复用。以扩展Function.prototype为例
Function.prototype.before=function(fn){
return (...args)=>{
fn()
this(...args)
}
}
Function.prototype.after=function(fn){
return (...args)=>{
this(...args)
fn()
}
}
let coreFn=(...args)=>{
console.log("coreFn",...args)
}
let fn=coreFn.before(()=>{
console.log("coreFn before")
}).after(()=>{
console.log("coreFn after")
})
fn(1,2)
2,柯里化函数
柯里化函数的功能就是让函数的功能变得更具体一些。
功能范围大==>小。应用的场景是将将多个参数的变换成单一的参数并且把(剩余的参数和结果)新函数返回
//实现一个柯里化函数,将一个函数转化为多次传递参数
const curring = (fn) => {
const exec = (sumArgs) => {
return sumArgs.length >= fn.length ? fn(...sumArgs) : (...args) => { return exec([...sumArgs, ...args]) }
}
return exec([])
}
function sum(a, b, c, d) {
return a + b + c + d
}
let result=curring(sum)(1,3)(4)(5)
3,回调函数解决并发问题
使用高阶函数暂存变量
const fs=require('fs')
function after(times,callbacks){
let obj={}//可以用来暂存变量。闭包
return (key,value)=>{
obj[key]=value
--times==0&&callbacks(obj)
}
}
let fn=after(2,(obj)=>{
console.log(obj)
})
fs.readFile("./age.txt",'utf8',(err,data)=>{
fn('age',data)
})
fs.readFile("./name.txt",'utf8',(err,data)=>{
fn('name',data)
})
关于文章
希望通过自我总结的过程提升自己的能力。如有错误,请
指正