美文网首页
JavaScript之柯里化

JavaScript之柯里化

作者: 初空 | 来源:发表于2022-06-19 15:17 被阅读0次

作用

函数柯里化,用于创建一个函数,这个函数是已经设置好了一个或者多个参数引用红宝书

其实就是说当一个函数 ,有多个参数的时候,先传递一部分函数参数然后调用它,然后返回一个新的函数,这个函数接受剩余参数,然后返回计算结果;

价值

提高参数复用性,优化代码,看下面demo
假设有这样一个需求,需要计算x*y的返回值

// 非柯里化计算2*y
const fn = (baseNum, currentNum) =>  baseNum * currentNum;
// 2 *3
fn(2,3)
// 2*4
fn(2,3)
....

// 柯里化计算2*y
const fn = baseNum => currentNum  => baseNum * currentNum;
const fn2 = baseNum(2)
//2*3
fn2(3)
//2*4
fn2(4)
....

看上面demo,2这个参数在非柯里化的时候重复出现,但是其实,这个参数完成是可以通过技术手法复用的就是柯里化,在柯里化之后,2这个参数就省略了

当然,现在有很多库都实现了柯里化函数比如 lodash中curry方法
为了跟好的理解,接下里啊模拟个curry方法

function curry (func) {
// 首先return一个函数
  return function curriedFcuntion(...args) {
   //通过解构,接受参数不确定的case 
   // 判断形参和实参的个数
   //形参指的是传入的函数参数的个数,这里指的就是getSum这个函数的形参
  // 获取函数形参,通过函数名.length方法获得
    if (args.length < func.length) {
      return function () {
        return curriedFcuntion(...args.concat(Array.from(arguments)))
      }
    }
   // 也可以使用 func.apply(this,[...args])
    return func(...args  )
  }
}

//测试下
function addSum (a, b, c) {
  return a + b + c
}

const curried = curry(addSum)

console.log(curried(1, 2, 3))
console.log(curried(1)(2, 3))
console.log(curried(1, 2)(3))
//6
//6
//6

总结

1、柯里化是对函数参数的一种缓存
2、使函数的颗粒度细腻
3、可以使多元函数转换成一元函数,进而组合使用生产更强大的函数

相关文章

  • javascript高阶特性

    javascript高阶特性之-curry化(柯里化) javascript高阶特性-串行执行promises j...

  • 『JavaScript专题』之函数柯里化

    JavaScript专题之函数柯里化 定义 维基百科中对柯里化 (Currying) 的定义为: In mathe...

  • javaScript之 柯里化

    前言:我们先要了解下柯里化的概念,什么是柯里化,他可以干什么,好处是什么,要知其然,也要知其所以然。自夸一句,小哥...

  • JavaScript之柯里化

    作用 函数柯里化,用于创建一个函数,这个函数是已经设置好了一个或者多个参数引用红宝书 其实就是说当一个函数 ,有多...

  • 掌握JavaScript函数的柯里化

    原文链接 Haskell和scala都支持函数的柯里化,JavaScript函数的柯里化还与JavaScript的...

  • 简单理解JavaScript中的柯里化和反柯里化

    简单理解JavaScript中的柯里化和反柯里化 前言 本文旨在让大家简单理解柯里化和反柯里化,这里不做深入探究,...

  • 简单理解JavaScript中的柯里化和反柯里化

    简单理解JavaScript中的柯里化和反柯里化 前言 本文旨在让大家简单理解柯里化和反柯里化,这里不做深入探究,...

  • JavaScript 柯里化

    简介 柯里化从何而来 柯里化, 即 Currying 的音译。 Currying 是编译原理层面实现多参函数的一个...

  • JavaScript柯里化

    Currying柯里化是函数式语言都有的一个特性,如Perl,Python,JavaScript。本篇就借用一下J...

  • JavaScript柯里化

    什么是柯里化? 官方的说法 在计算机科学中,柯里化(英语:Currying),又译为卡瑞化或加里化,是把接受多个参...

网友评论

      本文标题:JavaScript之柯里化

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