如果您的代码库具有咖喱功能,为什么要写闭包?

时间:2017-10-08 05:34:01

标签: 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)
    : (...moreArgs) => curry(func)(...args.concat(moreArgs))
)

这个递归版本都可以使用add(1, 2)add(1)(2)

1 个答案:

答案 0 :(得分:1)

curry是一种即时创建闭包的好方法,但在大多数情况下,编写闭包很简单,并且在必要时编写uncurry

  • 您可能没有curry可用,写一篇文章会比较麻烦。

  • 始终将您的函数包装在curry中非常麻烦。它创造了很多间接性和魔力,对于包括你自己在内的其他程序员来说可能并不明显。

  • 如果需要进行微优化,curry会在代码周围添加更多函数包装器和逻辑,最终在数万次调用后显着减速。