高阶函数

181 阅读1分钟

是什么

high order class, high order function

是一个参数是函数,返回值也是函数的函数

像不像绕口令?

有什么用

能不改变参数函数的情况下, 修饰参数函数,使其具备更多功能

function a(){
    alert(1);
}
function b(fun){
    return () => {
        alert('我要开始输出1了');
        fun();
    }
}
const c = b(a)// 在下文中可以用c(),代替a()了

上述代码里, 有程序员写了一个函数a,现在他升官了, 不写代码了, 我要把函数a增加一个功能,就是每次输出前,提示用户,'我要开始输出了'

所以我们写一个函数b,把函数a传参进去, 返回新函数c,以后就可以不使用a,而使用c函数了,a函数完美升级,而且没有改a函数内部代码

进阶版高阶函数

class A{
    method1(wrapper){
        wrapper.before();
        method2();
        wrapper.after();
    }
}
const a = new A();
a.method1({
    before(){
        console.log('开始');
    },
    after(){
        console.log('结束')
    }
})

需求,有一个类A,它有一个method2方法,现在应new过了, 我们希望method2执行前后输出开始和结束

所以我们不再使用method2,而是创建一个method1,把before和after函数传参给method1,method1内部执行method2,就实现了这个小需求

这也是react里的'setstate事物'的原理