自我总结几种高阶函数

126 阅读1分钟

高阶函数的应用

  • 关于高阶函数参数为函数或返回值为函数的函数被称为高阶函数。

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)
})

关于文章

希望通过自我总结的过程提升自己的能力。如有错误,请指正