哗众取宠
Currying 是一个转换函数的过程,该函数将多个参数转换为一系列函数,每个函数只有一个参数。Currying 与部分应用有关,但不相同。
我们在 JavaScript 中考虑以下函数:
var add = (x, y) => x + y
我们可以使用 currying 的定义来重写 add 函数:
var add = x => y => x + y
这个新版本采用单个参数 x
,并返回一个带有单个参数 y
的函数,该参数最终将返回添加 x
和 y
的结果。
var add5 = add(5)
var fifteen = add5(10) // fifteen = 15
另一个例子是当我们有以下函数将括号括在字符串周围时:
var generalBracket = (prefix, str, suffix) => prefix + str + suffix
现在,每次我们使用 generalBracket
时我们都要传递括号:
var bracketedJim = generalBracket("{", "Jim", "}") // "{Jim}"
var doubleBracketedJim = generalBracket("{{", "Jim", "}}") // "{{Jim}}"
此外,如果我们传入非括号的字符串,我们的函数仍会返回错误的结果。我们来解决这个问题:
var generalBracket = (prefix, suffix) => str => prefix + str + suffix
var bracket = generalBracket("{", "}")
var doubleBracket = generalBracket("{{", "}}")
请注意,bracket
和 doubleBracket
现在都是等待其最终参数的函数:
var bracketedJim = bracket("Jim") // "{Jim}"
var doubleBracketedJim = doubleBracket("Jim") // "{{Jim}}"