手写JS-柯里化函数的实现

更新日期: 2022-04-29阅读: 1.9k标签: 柯里化

前言

什么是函数柯里化呢?所谓”柯里化”,简单来说就是把一个多参数的函数,转化为单参数函数。

手写一个简单的小例子:

// 柯里化之前
function add(a, b, c) {
    return a + b + c
}
add(1, 2, 3) // 6

// 柯里化之后
let addCurry = curry(add)
addCurry(1)(2)(3) // 6
 

而这个例子显然也并不完整,比如curry函数是如何实现的呢?接下来跟着实现一下。


实现curry函数

  • 可以理解所谓的柯里化函数,就是封装==一系列的处理步骤==,通过闭包将参数集中起来计算,最后再把需要处理的参数传进去。
  • 实现原理就是用闭包把传入参数保存起来,当传入参数的数量足够执行函数时,就开始执行函数。

通过实现 curry 这个函数,使函数从一次调用传入多个参数变成多次调用每次传一个参数。

使用ES6语法手写curry函数:(相对来说更加简洁也更加易懂)

const curry = fn => 
    judge = (...args) =>
        args.length >= fn.length
            ? fn(...args)
            : (...arg) => judge(...args, ...arg)

// Test
const fn = curry(function(a, b, c) {
    console.log([a, b, c]);
})

add(1, 2, 3) // 6
add(1, 2)(3) // 6
add(1)(2)(3) // 6
add(1)(2, 3) // 6
 
  1. 调用curry函数,获取函数fn的参数。
  2. 定义一个新的函数judge,接收参数为...args。
  3. 判断新函数接受的参数长度是否大于等于fn剩余参数需要接收的长度
  4. 满足要求,则执行fn函数,并传入新函数的参数
  5. 否则,返回一个新的匿名函数,这个函数把所有传入参数...args保存在arg数组中,而这个匿名函数被执行后,就把以前收到的参数数组和当前的参数数组合并后,放到前面说的逻辑中,在judge函数里判断,重复第3步。


总结

经过手写一个小例子大家应该基本了解了什么是函数柯里化,并且实现了 curry 函数:用闭包把传入参数保存起来,当传入参数的数量足够执行函数时,就开始执行函数。虽然不算太深入,怎么也算小有收获吧。


链接: https://fly63.com/article/detial/11425

JavaScript函数柯里化

理论计算机科学中,柯里化提供了在简单的理论模型中,比如:只接受一个单一参数的lambda演算中,研究带有多个参数的函数的方式。 函数柯里化的对偶是Uncurrying,一种使用匿名单参数函数来实现多参数函数的方法。

javascript偏函数应用与柯里化的区别

很多刚刚了解函数式编程的人会对偏函数应用(partial application)和柯里化(currying)之间的区别感到困惑。实际上,直到现在也很少在 JavaScript 中看到柯里化的实际使用,许多叫curry()的工具函数并不是柯里化函数。它们其实是偏函数!

柯里化与反柯里化

柯里化,是一个逐步接收参数的过程。在接下来的剖析中,你会深刻体会到这一点。 反柯里化,是一个泛型化的过程。它使得被反柯里化的函数,可以接收更多参数。目的是创建一个更普适性的函数,可以被不同的对象使用。

js函数柯里化的延伸

如果我们需要设计一个函数来计算每个月的开销,在每天结束之前,我们需要记录当天花费了多少。在月底的时候计算出这个月一共开销了多少? 可以看出在性能上和方式二差不多,但是这样做更加通俗易懂了,当然在实际开发中,我们一般会封装为对象。

js高级函数技巧-函数柯里化

我们经常说在Javascript语言中,函数是“一等公民”,它们本质上是十分简单和过程化的。可以利用函数,进行一些简单的数据处理,return 结果,或者有一些额外的功能,需要通过使用闭包来实现,最后经常会return 匿名函数。

Js柯里化

柯里化(Currying),又称部分求值(Partial Evaluation),是把接收多个参数的函数变成接受一个单一参数(最初函数的第一个参数)的函数,并且返回接受剩余的参数而且返回结果的新函数的技术。

javascript实现函数柯里化与反柯里化

把接收多个参数的函数变换成接收一个单一参数(最初函数的第一个参数)的函数,并返回接受剩余的参数而且返回结果的新函数的技术。其由数学家Haskell Brooks Curry提出,并以curry命名。

Js之函数柯里化

最近在社区阅读技术博客的时候偶然间看到了函数柯里化几个字,还有要求手写js函数柯里化,心想是柯里化是什么高级的东西?没听说过啊?就带着问题出发,专门去学习了一下,做了一些整理。

理解Javascript的柯里化

函数式编程是一种如今比较流行的编程范式,它主张将函数作为参数进行传递,然后返回一个没有副作用的函数,说白了,就是希望一个函数只做一件事情。这种编程思想涵盖了三个重要的概念:

函数柯里化详解

在计算机科学中,柯里化(Currying)是把接受多个参数的函数变换成接受一个单一参数(最初函数的第一个参数)的函数,并且返回接受余下的参数且返回结果的新函数的技术。这个技术由 Christopher Strachey 以逻辑学家 Haskell Curry 命名的

点击更多...

内容以共享、参考、研究为目的,不存在任何商业目的。其版权属原作者所有,如有侵权或违规,请与小编联系!情况属实本人将予以删除!