美文网首页
js 高阶函数

js 高阶函数

作者: 不退则进_笑 | 来源:发表于2021-02-20 13:55 被阅读0次

    什么是高阶函数:

    如果一个函数符合下面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')
    

    相关文章

      网友评论

          本文标题:js 高阶函数

          本文链接:https://www.haomeiwen.com/subject/ncutfltx.html