我想我还没学会 curry 。我明白它的作用,以及如何去做。我只是想不出我会使用它的情况。
您在哪里使用 JavaScript 中的柯里化(Currying)(或者主要库在哪里使用它)?欢迎使用 DOM 操作或一般应用程序开发示例。
One of the answers提到动画。 slideUp、fadeIn 等函数将元素作为参数,通常是一个柯里化(Currying)函数,返回内置默认“动画函数”的高阶函数。为什么这比仅仅应用带有一些默认值的更高层函数更好?
使用它有什么缺点吗?
这里有一些关于 JavaScript currying 的好资源:
我会在评论中出现时添加更多内容。
因此,根据答案,柯里化(Currying)和部分应用通常是便利技术。
如果您经常通过使用相同配置调用高级函数来“优化”高级函数,则可以对高级函数进行 curry(或使用 Resig 的部分)来创建简单、简洁的辅助方法。
最佳答案
这是 interesting AND practical use of currying in JavaScript that uses closures :
function converter(toUnit, factor, offset, input) { offset = offset || 0; return [((offset + input) * factor).toFixed(2), toUnit].join(" "); } var milesToKm = converter.curry('km', 1.60936, undefined); var poundsToKg = converter.curry('kg', 0.45460, undefined); var farenheitToCelsius = converter.curry('degrees C', 0.5556, -32); milesToKm(10); // returns "16.09 km" poundsToKg(2.5); // returns "1.14 kg" farenheitToCelsius(98); // returns "36.67 degrees C"
这依赖于 Function 的 curry 扩展,尽管您可以看到它只使用 apply(没什么花哨的):
Function.prototype.curry = function() { if (arguments.length < 1) { return this; //nothing to curry with - return function } var __method = this; var args = toArray(arguments); return function() { return __method.apply(this, args.concat([].slice.apply(null, arguments))); } }
关于JavaScript curry : what are the practical applications?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/113780/