美文网首页
面试系列-函数柯里化

面试系列-函数柯里化

作者: 九旬大爷的梦 | 来源:发表于2020-04-12 22:35 被阅读0次

什么是函数柯里化?

在数学和计算机科学中,柯里化是一种将使用多个参数的一个函数转换成一系列使用一个参数的函数的技术。

例子一

看一个普通的 add 函数

function add(a, b) {
    return a + b
}
add(2, 3); // 5

假如我想要这样一个函数,怎么实现

curryAdd(2)(3); // 5

你可能会这样设计

function curryAdd(a) {
    return (b) => {
        return a + b
    }
}

但是我想要连续传呢?比如我想这样用。

curryAdd(1)(2)(3)(4)(..)

这就要用到函数柯里化了,使用之前,一定要理解这句话。

将一个接受多个参数的函数,转换为一系列使用一个参数的函数,这就是函数柯里化。

例子二

还是一个 add 函数

function add(a, b ,c ,d ,e){
    console.log(a + b + c + d + e)
}
let _fn = curry(add);

如何才能使得 _fn,可以这样调用呢?

_fn(1, 2, 3, 4, 5); // 15
_fn(1)(2)(3)(4)(5); // 15
_fn(1)(2, 3)(4, 5); // 15

我们可以借助闭包实现,用闭包把参数保存起来,当参数的数量足够执行函数了,就开始执行函数。

function curry(fn, len = fn.length){
    return _curry.call(this, fn, len)
}

function _curry(fn, len, ...args){
    return function(...params){
        console.log(`params: ${params}`);
        let _args = [...args, ...params];
        console.log(`_args:${_args}`)
        if(_args.length >= len){
             return fn.apply(this, _args)
        }else{
            return _curry.call(this, fn, len, ..._args)
        }
    }
}

相关文章

  • 面试系列-函数柯里化

    什么是函数柯里化? 在数学和计算机科学中,柯里化是一种将使用多个参数的一个函数转换成一系列使用一个参数的函数的技术...

  • 函数-柯里化

    面试题-- 函数柯里化怎么实现

  • 手写简单.bind()实现

    手写一个实现柯里化的.bind() 柯里化:《函数柯里化小结》柯里化:前端开发者进阶之函数柯里化Currying ...

  • [译]JavaScript中的函数柯里化

    原文 Currying in JS 函数柯里化 函数柯里化以Haskell Brooks Curry命名,柯里化是...

  • 从Swift函数式编程到设计模式(三)

    与抽象工厂模式相比,使用柯里化函数充当函数工厂,我们可以更轻松地基于一些条件创建一系列工厂方法。 柯里化函数(Cu...

  • 柯里化与函数合成

    柯里化 柯里化(currying)指的是将一个多参数的函数拆分成一系列函数,每个拆分后的函数都只接受一个参数(un...

  • 函数柯里化

    一. 什么是函数柯里化 函数柯里化是指将使用多个参数的函数转化成一系列使用一个参数的函数的技术, 它返回一个新的函...

  • 函数操作v1.0.0

    目录 函柯里化函数节流函数防抖 正文 函柯里化 函数节流 函数防抖

  • React基础篇之高阶函数&函数柯里化

    高阶函数 函数柯里化

  • swift 柯里化

    swift 柯里化 柯里化 1、什么是柯里化? 柯里化是把接受多个参数的函数变换成接受一个单一参数(最初函数的第一...

网友评论

      本文标题:面试系列-函数柯里化

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