美文网首页
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函数] (Array)の高阶函数

    JS函数 高阶函数 高阶函数英文叫Higher-order function。那么什么是高阶函数? JavaScr...

  • 【JS】高阶函数与函数柯里化

    高阶函数 至少满足以下条件的函数: 接受一个或多个函数作为输入 输出一个函数JS高阶函数浅析[https://gi...

  • 高级语法

    高阶函数:以其他函数作为其参数或者返回值的函数。跟JS一样,python提供了部分内置高阶函数 匿名函数:pyth...

  • 高阶组件

    高阶函数:接受一个或多个函数并返回一个函数 JS中,array的map、filter、reduce等方法就是高阶函...

  • python函数式编程

    高阶函数 把函数作为参数传入,这样的函数称为高阶函数,函数式编程就是指这种高度抽象的编程范式。与js相似,与c#中...

  • js高阶函数

    一、函数作为参数传递 1、回调函数 ajax异步请求 2、Array.prototype.sort 二、函数作为返...

  • JS高阶函数

    1.map: var arr=[1,2,3,4]; arr.map(function_name); 这传入的方法会...

  • js高阶函数

    bind可以利用此种特性方便代码重用,如下,可以不同的页面中只需要配置某几项,前面几项固定的配置可以选择用bind...

  • JS 高阶函数

    最近在学习函数式编程,整个 team 都在啃一本叫《Mostly adequate guide》的函数式编程教材,...

  • js高阶函数

    高阶函数将其他函数作为参数或将返回函数作为结果。它们提供了JavaScript中清晰易懂的语法。这将帮助你以更少的...

网友评论

      本文标题:js 高阶函数

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