第一次听说currying是在一年前的一个群聊里,看过几次文章愣是没搞懂其用途。遂想自己整理一篇文档供日后翻阅。
先来看wiki上的定义:
在计算机科学中,"柯里化"是把接受多个参数的函数变换成接受一个单一参数(最初函数的第一个参数)的函数,并且返回接受余下的参数而且返回结果的新函数的技术。
下面是一个简单的柯里化的例子:
function curriedAdd (x) {
return function(y) {
return x + y
}
}
curriedAdd(2)(3) // 5
那么柯里化的使用场景有哪些呢?
- 参数复用
固定不变的参数,实现参数复用是 Currying 的主要用途之一。 - 延迟执行
延迟执行也是 Currying 的一个重要使用场景,同样 bind 和箭头函数也能实现同样的功能。
在前端开发中,一个常见的场景就是为标签绑定 onClick 事件,同时考虑为绑定的方法传递参数。
总结:
- Currying 在 JavaScript 中是“低性能”的,但是这些性能在绝大多数场景,是可以忽略的。
- Currying 的思想极大地助于提升函数的复用性。
- Currying 生于函数式编程,也陷于函数式编程。假如没有准备好写纯正的函数式代码,那么 Currying 有更好的替代品。
参考:
PS:因作者能力有限,固没有对currying作更深层次的探究,只是摘抄了一些其他文章的提炼的文字,如果对currying感兴趣的同学可以自行google相关文章获得更多信息。编程小白推荐看张鑫旭的这篇JS中的柯里化,非常浅显易懂,还很有趣。
网友评论