我不认为我已经开始使用咖喱了。我明白它的作用,以及如何去做。我只是想不出我会使用它的情况。
你在哪里使用 JavaScript 中的柯里化(或者主要库在哪里使用它)?欢迎使用 DOM 操作或一般应用程序开发示例。
其中一个答案提到了动画。像slideUp,fadeIn将一个元素作为参数的函数通常是一个返回高阶函数的柯里函数,内置默认的“动画函数”。为什么这比仅仅应用带有一些默认值的更高层函数更好?
slideUp
fadeIn
使用它有什么缺点吗?
我会在评论中出现更多内容时添加更多内容。
因此,根据答案,一般来说,柯里化和部分应用是便利技术。
如果您经常通过使用相同配置调用高级函数来“定义”高级函数,则可以对高级函数进行 curry(或使用 Resig 部分)来创建简单、简洁的辅助方法。
@汉克盖伊
回应 EmbiggensTheMind 的评论:
我想不出一个在 JavaScript 中柯里化( currying)本身有用的例子。它是一种将具有多个参数的函数调用转换为每个调用只有一个参数的函数调用链的技术,但 JavaScript 支持在单个函数调用中使用多个参数。
但是,在 JavaScript 中——我假设大多数其他实际语言(不是 lambda 演算)——通常与部分应用程序相关联。John Resig解释得更好,但要点是有一些逻辑可以应用于两个或多个参数,并且您只知道其中一些参数的值。
您可以使用部分应用程序/currying 来修复那些已知值并返回一个仅接受未知数的函数,以便稍后在您实际拥有希望传递的值时调用。这提供了一种很好的方法来避免重复自己,当您一遍又一遍地调用相同的 JavaScript 内置函数时,使用所有相同的值,但只有一个。窃取约翰的例子:
String.prototype.csv = String.prototype.split.partial(/,\s*/); var results = "John, Resig, Boston".csv(); alert( (results[1] == "Resig") + " The text values were split properly" );