Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/396.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如果您的代码库具有curry函数,为什么要编写闭包?_Javascript_Functional Programming_Closures_Currying - Fatal编程技术网

Javascript 如果您的代码库具有curry函数,为什么要编写闭包?

Javascript 如果您的代码库具有curry函数,为什么要编写闭包?,javascript,functional-programming,closures,currying,Javascript,Functional Programming,Closures,Currying,在进行函数编程时,如果有可用的curry函数,那么编写闭包的原因是什么 结束 add = additive => value => value + additive 咖喱 add = curry((additive, value) => value + additive) 这是咖喱功能: curry = func => (...args) => ( args.length >= func.length ? func(...args)

在进行函数编程时,如果有可用的
curry
函数,那么编写闭包的原因是什么

结束

add = additive => value => value + additive
咖喱

add = curry((additive, value) => value + additive)
这是咖喱功能:

curry = func => (...args) => (
    args.length >= func.length
    ? func(...args)
    : (...moreArgs) => curry(func)(...args.concat(moreArgs))
)

在这个递归版本中,
add(1,2)
add(1)(2)
都是可能的。

curry
是一种动态创建闭包的好方法,但在大多数情况下,编写闭包和
uncurry
在必要时要简单得多:

  • 您可能没有可用的
    咖喱
    ,编写咖喱更麻烦

  • 总是用
    curry
    来包装函数很麻烦。它创造了很多间接和神奇的东西,而这些东西对其他程序员来说可能并不明显,包括你自己

  • 如果需要进行微优化,currying将在代码周围添加更多的函数包装和逻辑,最终在成千上万次调用之后使其速度明显减慢


通过手动套用,您可以更加灵活,例如
f=(x,y)=>z=>…
f
是一个部分通用的函数,可组合。有时候,写作能力就是你所需要的。我更新了我的帖子。您可以像使用这种特殊的
咖喱一样充满活力。咖喱会使函数变慢。