Javascript实现函数的curry化

xiaoxiao2021-02-28  82

首先介绍下curry的概念:

使函数理解并处理部分应用的过程就叫做CURRY化:

例如,我想将add(x,y)方法转换成一个可以分成两部输入参数并正确计算结果的函数,我们就可以用到CURRY化的概念,javascript是一门动态性很强的语言,我们很容易实现这个效果:

代码如下:

function add(x,y){ if(typeof y === 'undefined'){ return function (y) { return x + y; } } return x + y; }

这里将原始的x存储在闭包中,原始的y则作为局部变量复用。

这是结果:

add(3) function (newy) { return oldx + newy; } typeof add(3) “function” add(3)(4) 7

当我们的函数中传递的参数大多数都是相似的情况下,我们考虑使用CURRY化,现在我们可以写一个通用CURRY的函数:

function schonfinkelize(fn){ var slice = Array.prototype.slice, stored_arg = slice.call(arguments,1); return function () { var new_arg = slice.call(arguments), args = stored_arg.concat(new_arg); return fn.apply(null,args); } }

我们可以将add函数CURRY化:

function add(x,y){ return x + y; } var newAdd = schonfinkelize(add,1); newAdd(2,3) 3

转载请注明原文地址: https://www.6miu.com/read-35121.html

最新回复(0)