首页 > 其他分享 >函数柯里化

函数柯里化

时间:2024-09-09 18:13:37浏览次数:4  
标签:function return 函数 nums sum thing 柯里化 const

函数柯里化

含义:

可以大概理解为: 将fn(a,b,c)转换为fn(a)(b)(c)

原函数:

function sum(a,b){
  return a+b
}
console.log(sum(1,2))

柯里化后:

    function sum(a) {
        return function (b) {
            return a + b
        }
    }
    console.log(sum(1)(2));

.
.
.

面试题

函数sum实现, 接收参数为5个时即实现累加, 满足以下几个要求:
sum(1)(2)(3)(4)(5) //输出15
sum(1)(2,3)(4)(5) //也输出15
sum(1)(2,3,4)(5) //也输出15
sum(1)(2,3)(4,5) //也输出15

.

思路: 保存不定长的参数, 如果数组长度达到5即实现累加, 否则返回函数
使用slice(数组下标前闭后开)截取并浅拷贝返回一个新数组
使用reduce((累加器, 当前值)=>累加器+当前值, 初始值)实现数组累加

let nums = []
    function sum(...args) {
        nums.push(...args)
        if (nums.length >= 5) {
            // 仅累加前5个
            const res = nums.slice(0, 5).reduce((p, v) => p + v, 0)
            nums = []
            return res
        } else {
            return sum
        }
    }

.
.
调优: 参数累加的个数可以进行自定义, 这里使用了闭包

    function sumCounter(count) {
        let nums = []
        function sum(...args) {
            nums.push(...args)
            if (nums.length >= count) {
                const res = nums.slice(0, count).reduce((p, v) => p + v, 0)
                nums = []
                return res
            } else {
                return sum
            }
        }
        return sum
    }


.
.

实际应用

参数复用: 为函数预制通用的参数, 供多次重复调用

// // 有如下4个函数
    // function isUndefined(thing) {
    //     return typeof thing === 'undefined'
    // }
    // function isNumber(thing) {
    //     return typeof thing === 'number'
    // }
    // function isString(thing) {
    //     return typeof thing === 'string'
    // }
    // function isFunction(thing) {
    //     return typeof thing === 'function'
    // }

    // 改为通过 typeOfTest 生成:
    const typeOfTest = function (type) {
        // 1. 复用类型判断函数逻辑
        // 2. 动态传入判断的类型
        function isUndefined(thing) {
            return typeof thing === type
        }
        return isUndefined

    }
    const isUndefined = typeOfTest('undefined')
    const isNumber = typeOfTest('number')
    const isString = typeOfTest('string')
    const isFunction = typeOfTest('function')

    // 可以通过 isUndefined,isNumber,isString,isFunction 来判断类型:

    isUndefined(undefined) // true
    isNumber('123') // false
    isString('memeda') // true
    isFunction(() => { }) // true

可以简化修改为:

 const typeOfTest = type => thing => typeof thing === type

标签:function,return,函数,nums,sum,thing,柯里化,const
From: https://www.cnblogs.com/mandyGuan12/p/18405046

相关文章

  • PHP错误处理全攻略:掌握函数中的错误处理机制,提升代码健壮性,php显示错误报告方式
    在开发过程中,PHP错误处理是一个非常关键的环节。错误处理不仅关系到程序的稳定性,还直接影响到用户的使用体验。如果代码中存在未处理的错误,轻则导致功能异常,重则可能引发系统崩溃。本文将为大家详细介绍PHP中的错误处理机制,帮助你掌握相关技巧,从而提升代码的健壮性。我们需要了解......
  • 16.函数--字符串函数
    常用函数:|函数|功能||--------------------------------|--------------------------------||CONCAT(s1,s2,…,sn)|字符串拼接,将s1,s2,…,sn拼接成一个字符串||LOWER(str)......
  • 18.函数--日期函数
    常用函数:|函数|功能||----------------------------------|---------------------------||CURDATE()|返回当前日期||CURTIME()......
  • 19.函数--流程函数
    常用函数:|函数|功能||----------------------------------------------------------------|--------------------------------------||IF(value,t,f)......
  • Prometheus常用函数
    Prometheus提供了多种函数,以帮助用户在PromQL(PrometheusQueryLanguage)中进行数据查询和分析。以下是一些常用的Prometheus函数:1.rate()描述:计算一个计数器在指定时间窗口内的平均增长率。用法:rate(metric_name[5m]),表示在过去5分钟内的增长率。2.irate()描述:计......
  • CSS隐藏元素的几种方法,以及他们之间的区别,opacity/visibility/display/rgba函数对比
    文章目录概要displayvisibilityopacitybackground比对概要在网页设计中,我们经常需要将一个元素隐藏或者显示,而需求不同时,不同的隐藏方式也会带来不同的隐藏效果,我们来看看集中隐藏方式的不同。display浏览器不会生成属性为display:none;的元素。dis......
  • 2025秋招计算机视觉面试题(十二) -理清深度学习优化函数发展脉络
    问题深度学习中有很多优化函数,常见的那些你还记得它的定义以及优缺点吗?背景知识深度学习网络训练中,有很多可供选择的优化函数如SGD、Adam等等,到底用哪个好呢?其实这个问题没有确切的答案,优化函数是需要配合损失函数使用的,说白了,优化函数也是一种超参数,是需要尝试的,哪个效......
  • JavaScript 函数式编程
    0x01函数式编程(1)概述函数式编程(FunctionalProgramming,简称FP)是一种编程范式,它将计算机运算视为数学上的函数计算,强调将计算过程看作是函数之间的转换而不是状态的改变❗“函数”的意思是指映射关系其他常见编程范式包括面向过程编程、面向对象编程等核心思想:将函......
  • 复制REUSE_ALV_GRID_DISPLAY_LVC,给函数添加简易的F4处理能力
    翻遍REUSE_ALV_GRID_DISPLAY_LVC这个函数我们可以发现,这个函数里预定义了一些事件类型。不过也缺少了一些类型,看看SLIS这个类型池就可以发现,ONF4事件是没有的。为了把这个函数做出通用和简易的,复制这个函数所在的函数组SLVC_FULLSCREEN到ZSLVC_FULLSCREEN.然后我们在这个新函数......
  • kingbase——创建timestampdiff函数
    创建函数如下:CREATEORREPLACEFUNCTION"ops_data"."timestampdiff"("para1"text,"para2""sys"."timestamp","para3""sys"."timestamp")RETURNS"pg_catalog".&q......