谈谈js里的Currying

第一次听说currying是在一年前的一个群聊里,看过几次文章愣是没搞懂其用途。遂想自己整理一篇文档供日后翻阅。
先来看wiki上的定义:

在计算机科学中,"柯里化"是把接受多个参数的函数变换成接受一个单一参数(最初函数的第一个参数)的函数,并且返回接受余下的参数而且返回结果的新函数的技术。

下面是一个简单的柯里化的例子:

function curriedAdd (x) {
  return function(y) {
    return x + y
  }
}
curriedAdd(2)(3)    // 5

那么柯里化的使用场景有哪些呢?

  1. 参数复用
    固定不变的参数,实现参数复用是 Currying 的主要用途之一。
  2. 延迟执行
    延迟执行也是 Currying 的一个重要使用场景,同样 bind 和箭头函数也能实现同样的功能。
    在前端开发中,一个常见的场景就是为标签绑定 onClick 事件,同时考虑为绑定的方法传递参数。

总结:

  1. Currying 在 JavaScript 中是“低性能”的,但是这些性能在绝大多数场景,是可以忽略的。
  2. Currying 的思想极大地助于提升函数的复用性。
  3. Currying 生于函数式编程,也陷于函数式编程。假如没有准备好写纯正的函数式代码,那么 Currying 有更好的替代品。

参考:

  1. wiki currying
  2. 大佬,JavaScript 柯里化,了解一下?

PS:因作者能力有限,固没有对currying作更深层次的探究,只是摘抄了一些其他文章的提炼的文字,如果对currying感兴趣的同学可以自行google相关文章获得更多信息。编程小白推荐看张鑫旭的这篇JS中的柯里化,非常浅显易懂,还很有趣。

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容