什么是柯里化
在数学和计算机科学中,柯里化是一种将使用多个参数的函数转换成一系列使用一个参数的函数的技术。
核心思想:
用闭包把参数保存起来,当参数的数量足够执行函数了,就开始执行函数
1 | function add(a, b) { |
用途
柯里化的实际意义是什么呢?
1 | // 示意而已 |
目前的感觉,只是把传递参数的次数增加了,好像并没有什么实际的意义,但是如果我们是吧柯里化后的函数比如map?
比如说我们获得了这么一段数据:
1 | var person = [{name: 'kevin'}, {name: 'daisy'}] |
如果我们要获取所有的name值,可以这么做:
1 | var name = person.map(function(item) { |
当用上了curry函数:
1 | var prop = curry(function(key, obj) { |
这里为了获得name属性还要再编写一个prop函数,会不会自添麻烦,但是可以注意到,prop函数编写一次后,以后可以多次使用,代码的可读性也提高了。
第一版
柯里化的应用在未来会很常见,现在我们就来编写这个curry函数。
1 | function curry(fn){ |
已经有点柯里化的感觉了,但是还没有达到要求,不够我们可以把这个函数用作辅助函数,帮助我们写出一个真正的curry函数
第二版
1 | function sub_curry(fn) { |
使用一下我们编写的函数
1 | var fn = curry(function(a, b, c) { |
似乎已经达到了我们的预期,然而这个curry函数的实现有点难以理解啊…
更易懂的实现
如果你没法理解的话,试试下面的方式,也能实现同样的效果:
1 | function curry(fn, args) { |
第三版的代码
1 | function curry(fn, args, holes) { |