正文
对于函数柯里化之前就了解过,大概知道是个什么东西。
最近在读Vue源码的时候,看到了
cached
函数的使用,让我觉得这个代码写的挺有意思,于是在
sg
发问,看了
@sunyongjian
回答,于是又绕到了
柯里化
和
高阶函数上
。
柯里化定义
维基中有对柯里化的定义
:在计算机科学中,柯里化(英语:Currying),又译为
卡瑞化
或
加里化
,是把接受
多个参数的函数变换成接受一个单一参数(最初函数的第一个参数)的函数
,并且返回接受余下的参数而且返回结果的新函数的技术。
用JavaScript表达定义
着重看
多个参数的函数变换成接受一个单一参数(最初函数的第一个参数)的函数
var foo = function(a) {
return function (b) {
return function (c) {
return a+b+c;
};
};
};
使用
foo(1) // f (b) { return function(c) { return a+b+c } }
foo(1)(2) // f (c) { return a+b+c }
foo(1)(2)(3) // 6
其实就是
逐渐消元
的过程。知乎上也有类似的问题,具体见:
如何理解functional programming里的currying与partial application