最近刷牛客网上的前端编程题,涉及到了柯里化这个函数概念。说实话之前我并没有听说过柯里化(简直太孤陋寡闻了),只知道闭包,于是通过几个大佬的博客了解到了这一概念,做此记录以便简单理解。
参考链接:https://cnodejs.org/topic/5884574e250bf4e2390e9e99
https://baijiahao.baidu.com/s?id=1595237626204124028&wfr=spider&for=pc
维基百科中关于其定义如下:
在计算机科学中,柯里化(Currying),又译为卡瑞化或加里化,是把接收多个参数的函数变换成接收一个单一参数(最初函数的第一个参数)的函数,并返回接受剩余的参数而且返回结果的新函数的技术。这个技术由克里斯托弗·斯特雷奇以逻辑学家哈斯凯尔·加里命名的。
现在我们举个例子来具体的解释一下以上的概念。
例如一个简单的加法函数:
//函数定义
function add(x,y){
return x + y;
}
//函数调用
add(3,5);//8
如果采用柯里化是怎么将接受两个参数的函数变成接受单一参数的函数呢,其实很简单如下:
//函数表达式
var add = function(x){
return function(y){
return x + y;
}
};
//函数调用
add(3)(5);
这样理解是不是就很简单了,其实实质就是闭包的概念。柯里化所要表达的是:如果你固定某些参数,你将得到接受剩余参数的一个函数,所以对于有两个变量的函数y^x,如果固定了y=2,则得到有一个变量的函数2^x。这就是求值策略中的部分求值策略。