当前位置: 首页 > news >正文

函数柯里化

一、柯里化

柯里化是将函数和参数结合产生一个新的函数

二、函数柯里化例子

<!DOCTYPE html>
<html lang="zh">

    <head>
        <meta charset="UTF-8" />
        <meta name="viewport" content="width=device-width, initial-scale=1.0" />
        <meta http-equiv="X-UA-Compatible" content="ie=edge" />
        <title>函数柯里化</title>
    </head>

    <body>
        <script type="text/javascript">
            function add(...values) {
                let sum = 0;

                for(var val of values) {
                    sum += val;
                }

                return sum;
            }

            Function.prototype.curry = function() {
                let slice = Array.prototype.slice;
                let defaultValue = slice.call(arguments);
                let that = this;
                return function() {
                    return that.apply(this, defaultValue.concat(slice.call(arguments)))
                }
            }
            let add1 = add.curry(1,2);
            console.log(add1(5)); //8
            console.log(add1(3)); //6
        </script>
    </body>

</html>

3、一个有用的示例(数组排序)

<!DOCTYPE html>
<html lang="zh">

    <head>
        <meta charset="UTF-8" />
        <meta name="viewport" content="width=device-width, initial-scale=1.0" />
        <meta http-equiv="X-UA-Compatible" content="ie=edge" />
        <title>函数柯里化</title>
    </head>

    <body>
        <script type="text/javascript">
            Function.prototype.curry = function() {
                let slice = Array.prototype.slice;
                let defaultValue = slice.call(arguments);
                let that = this;
                return function() {
                    return that.apply(this, defaultValue.concat(slice.call(arguments)))
                }
            }

            Array.prototype.sortDescending = Array.prototype.sort.curry((a, b) => b - a);
            let data = [1, 5, 2, 3, 7, 4];
            console.log(data.sortDescending())
        </script>
    </body>

</html>

 4、函数柯里化 存钱的例子

<!DOCTYPE html>
<html lang="zh">

    <head>
        <meta charset="UTF-8" />
        <meta name="viewport" content="width=device-width, initial-scale=1.0" />
        <meta http-equiv="X-UA-Compatible" content="ie=edge" />
        <title>函数柯里化 存钱例子</title>

    </head>

    <body>

        <script type="text/javascript">
            function kelihua(fn) {
                let arr = [];

                function res() {
                    if(arguments.length == 0) {
                        return fn.apply(null, arr)
                    } else {
                        arr.push(...arguments)
                    }
                }
                return res;
            }
            let countMoney = kelihua(function() {
                let s = 0
                for(let i = 0; i < arguments.length; i++) {
                    s += arguments[i]
                }
                return s;
            })

            // 2018-01-01 存了1毛钱

            countMoney(1)

            // 2018-01-02 存了2毛钱

            countMoney(2)

            // 2018-01-03 存了3毛钱

            countMoney(3)

            // 2018-01-04 存了4毛钱

            countMoney(4)

            // 统计这笔巨额存款 输出结果为 10

            console.log(countMoney())
        </script>
    </body>

</html>

 

相关文章:

  • 前端页面注意事项
  • javascript 解决跨越问题
  • 基于axios的vue插件,让http请求更简单
  • 解决大并发的问题
  • 关于bootstrap框架美化的实例教程(python)
  • 如何使用Windows Library文件进行持久化
  • HTNL5列表,表格,音频,视频,iframe内联框架
  • forEach,for...of,map与asycn/await
  • Synchronized 关键字使用、底层原理、JDK1.6 之后的底层优化以及 和ReenTrantLock 的对比...
  • jchdl - GSL实例 - DFlipFlop(D触发器)
  • webgl滤镜--会呼吸的痛
  • 区块链入门教程btcpool矿池源码分析环境搭建
  • 镁客网每周硬科技领域投融资汇总(10.21-10.27),AI芯片创企Syntiant获英特尔等头部企业投资...
  • zabbix介绍
  • 如何做需求分析
  • [PHP内核探索]PHP中的哈希表
  • create-react-app项目添加less配置
  • gops —— Go 程序诊断分析工具
  • JAVA 学习IO流
  • Java|序列化异常StreamCorruptedException的解决方法
  • nfs客户端进程变D,延伸linux的lock
  • tensorflow学习笔记3——MNIST应用篇
  • vue.js框架原理浅析
  • -- 查询加强-- 使用如何where子句进行筛选,% _ like的使用
  • 翻译 | 老司机带你秒懂内存管理 - 第一部(共三部)
  • 高性能JavaScript阅读简记(三)
  • 如何优雅地使用 Sublime Text
  • 适配iPhoneX、iPhoneXs、iPhoneXs Max、iPhoneXr 屏幕尺寸及安全区域
  • 网络应用优化——时延与带宽
  • 微信小程序--------语音识别(前端自己也能玩)
  • 小程序button引导用户授权
  • 与 ConTeXt MkIV 官方文档的接驳
  • 正则表达式小结
  • 终端用户监控:真实用户监控还是模拟监控?
  • 《TCP IP 详解卷1:协议》阅读笔记 - 第六章
  • ​flutter 代码混淆
  • ​低代码平台的核心价值与优势
  • ​业务双活的数据切换思路设计(下)
  • #我与Java虚拟机的故事#连载05:Java虚拟机的修炼之道
  • (1)常见O(n^2)排序算法解析
  • (11)MATLAB PCA+SVM 人脸识别
  • (32位汇编 五)mov/add/sub/and/or/xor/not
  • (pytorch进阶之路)CLIP模型 实现图像多模态检索任务
  • (附源码)springboot建达集团公司平台 毕业设计 141538
  • (全注解开发)学习Spring-MVC的第三天
  • (学习日记)2024.03.25:UCOSIII第二十二节:系统启动流程详解
  • .bat批处理(十一):替换字符串中包含百分号%的子串
  • .Net Core webapi RestFul 统一接口数据返回格式
  • .Net Framework 4.x 程序到底运行在哪个 CLR 版本之上
  • @staticmethod和@classmethod的作用与区别
  • [1]-基于图搜索的路径规划基础
  • [C++随笔录] 红黑树
  • [Hibernate] - Fetching strategies
  • [java面试]宇信易诚 广州分公司 java笔试题目回忆录
  • [msg_msg] corCTF2021 -- fire_of_salvation