zoukankan      html  css  js  c++  java
  • js 函数柯里化

    函数柯里化的主要目的就是为了减少函数传参,同时将一些固定参数私有化。下面展示一段非常简单计算圆面积的代码来说明函数柯里化的原理:

    //circle函数,接受半径r和π
    function circle(r,p){
        //计算半径为r的圆的面积
        var area=p*r*r;
        return area;
    }
    /*
     * 通过函数柯里化来简化circle函数,只传入半径就能计算出面积
     * 不管怎么样,π是不会变的,因此我们将他写死,不需要外部调用传入
     */
    function curryCircle(r){
        var p=3.14;
        var area=p*r*r;
        return area;
    }

    也许你会觉得这段代码很二,但是这就是函数柯里化的真实面目。当然上面的代码只是一个非常小的例子,真实世界中的函数柯里化会比它凶恶一点,下面来讨论一个更通用的例子。假设π不是唯一的(比如我们有三种π),我们计算圆面积公式当中的π会根据场景不同而变化,这个时候我们就不能直接写死,而需要根据不同环境来配置π:

    //circle函数,接受半径r和π
    function circle(r,p){
        //计算半径为r的圆的面积
        var area=p*r*r;
        return area;
    }
    //针对circle函数的柯里化函数
    function curry(fn,p){
        var finalMethod=function(r){
            var result=fn(r,p);
            return result;
        }
        return finalMethod;
    }
    //我们有3种不同的π
    var curryCircle1=curry(circle,1.14);
    var curryCircle2=curry(circle,2.14);
    var curryCircle3=curry(circle,3.14);
    //输出:4.56  8.56  12.56
    console.log(curryCircle1(2),curryCircle2(2),curryCircle3(2));

    可以看到,curry方法通过封装最基础的circle方法,同时保存设置好的p参数(π),并返回一个finalMethod方法,这样我们最终调用finalMethod时就只需要传入参数r(半径)就可以完成。借助函数柯里化,我们拥有了三个简化的计算圆面积方法。

  • 相关阅读:
    Docker01 centos系统安装、centos安装docker、docker安装mongoDB
    WebFlux03 SpringBoot WebFlux实现CRUD
    WebFlux02 SpringBoot WebFlux项目骨架搭建
    WebFlux01 webflux概念、异步servlet、WebFlux意义
    ReactiveStream03
    ReactiveStream02
    ReactiveStream01
    Stream03
    python爬虫2
    python爬虫1
  • 原文地址:https://www.cnblogs.com/mengfangui/p/9322286.html
Copyright © 2011-2022 走看看