JavaScript之柯里化

作用

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

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

价值

提高参数复用性,优化代码,看下面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、可以使多元函数转换成一元函数,进而组合使用生产更强大的函数

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 217,657评论 6 505
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,889评论 3 394
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,057评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,509评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,562评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,443评论 1 302
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,251评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,129评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,561评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,779评论 3 335
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,902评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,621评论 5 345
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,220评论 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,838评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,971评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,025评论 2 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,843评论 2 354

推荐阅读更多精彩内容

  • 简介 柯里化从何而来 柯里化, 即 Currying 的音译。 Currying 是编译原理层面实现多参函数的一个...
    流动码文阅读 3,111评论 0 2
  • 一、简介 维基百科中的定义:柯里化(Currying),又称部分求值,是把接受多个参数的函数变换成接受一个单一参数...
    2016_18点阅读 869评论 0 1
  • 柯里化 当一个函数有多个参数的时候先传递一部分参数调用它(这部分参数以后永远不变) 然后返回一个新的函数接收剩余参...
    开水泡饭阅读 160评论 0 0
  • 柯里化 / 高阶函数 柯里化:将 f(x,y) 变成 f(x=1)(y) 或 f(y=1)x 重点!!!柯里化可以...
    littleyu阅读 201评论 0 1
  • 什么是柯里化? 官方的说法 在计算机科学中,柯里化(英语:Currying),又译为卡瑞化或加里化,是把接受多个参...
    CodeMT阅读 138评论 0 0