快捷搜索:

Javascript中currying的实现

本文示例源代码或素材下载

Currying似乎是函数式说话都有的一个特点,比如Perl,Python,Javascript。

那么到底什么是Currying,我是在进修Closure时无意中打仗到这个定义的,感觉很是有趣。

先看看 Wiki 中的定义:

Curryingis the technique of transforming afunctionthat takes multiplearguments

in such a way that it can be called as a chain of functions each with a single argument.

大年夜概的意思便是说,将拥有多个参数的函数Currying化为拥有单一参数的函数形式。

下面举一个简单的例子阐明Javascript中的Currying实现,一个简单的乞降函数:

functionadd(x,y){

returnx+y;

}

console.log('add(2,3)=='+add(2,3));

对其进行Currying,及调用措施:

functioncurry_add(x){

returnfunction(y){

returnx+y;

}

}

console.log('curry_add(2)(3)=='+curry_add(2)(3));

留意,curry_add(2) 返回的是函数。

我们还可以定义一个通用的 curry 函数:

functioncurry(fn){

varargs=[];

for(vari=1;i

这个函数至少接管一个参数(必要curry的函数),对付前面的 add 函数,我们可以这样来调用:

console.log('curry(add)(2,3)=='+curry(add)(2,3));

console.log('curry(add,2)(3)=='+curry(add,2)(3));

console.log('curry(add,2,3)()=='+curry(add,2,3)());

由于 curry(add, 2) 或 curry(add) 返回的照样函数,以是我们还可以对其进行Currying,如下代码:

console.log('curry(curry(add),2)(3)=='+curry(curry(add),2)(3));

console.log('curry(curry(add,2),3)()=='+curry(curry(add,2),3)());

运行时截图:

您可能还会对下面的文章感兴趣: