Currying 指的就是把一个接受多个参数的函数,搞成每次只接收一个参数的函数序列。
看个例子:
const greet = (greeting, name) => { return `${greeting}, ${name}` } greet('hello', 'ninghao') // “hello, ninghao”
上面的 greet 就是一个接收多个参数的函数。如果把它转换成 Currying 风格的函数,会像这样:
const greet = greeting => name => `${greeting}, ${name}`
上面用了箭头函数,如果写成普通的函数应该像这样:
const greet = function(greeting) { return function(name) { return `${greeting}, ${name}` } }
greet
是一个函数,它接收一个参数是 greeting
,这个 greet
会返回一个函数,这个被返回的函数又会接收另一个参数:name
,在这个被返回的函数里,会返回最终的结果。这里返回的就是把 greeting
与 name
参数的值组织成了一个新的字符串。
这种函数用起来像这样:
greet('hello')('ninghao') // “hello, ninghao”函数式编程 JavaScript
评论
用箭头函数之后,感觉作用域链显得特别清晰了
7 年 8 个月 以前
暂时没能理解 Currying 有什么好处,皓哥能举点实际例子吗?
7 年 8 个月 以前
嗯,行。先简单了解一下,我再收集一些实际的应用案例。
7 年 8 个月 以前