• 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(半径)就可以完成。借助函数柯里化,我们拥有了三个简化的计算圆面积方法。

  • 相关阅读:
    反悔贪心 学习笔记
    「CF901C」Bipartite Segments 题解
    「HEOI2015」公约数数列 题解
    拓展欧拉定理
    莫比乌斯反演题目选做
    八月水题录
    chapt15、使用虚拟内存
    chapt16、线程堆栈
    chapt14、探索虚拟内存
    get files version by vbs
  • 原文地址:https://www.cnblogs.com/mengfangui/p/9322286.html
Copyright © 2020-2023  润新知