【函数】函数柯里化
<h4>函数柯里化</h4>
<hr />
<p>纯正的函数式编程中,所有的函数都只有一个参数。 这样再js中就会写成这样getId('id')(data)。我们必须写下两个括号, 这是由于js本身的语法决定的,对于scala,haskell等函数式语言,不存在这样的事情。 因此我们通常使用一些函数式编程库帮我们简化成getId('id', data)的写法。 当然这并不以为着getId就不柯里化了。这只是一个语法糖而已。</p>
<h5>getId('id')(data) || getId('id', data) 像这样两者都可以执行</h5>
<pre><code>function curry(fn) {
return function inner(...args) {
if(args.length < fn.length) {
return function(...innerArgs) {
return inner.apply(this, args.concat(innerArgs))
}
}
console.log('aa')
return fn.apply(this, args)
}
}
function add(a,b){
return a+b
}
var curryAdd = curry(add);
console.log(curryAdd)
var a = curryAdd(1)(2)
var b =curryAdd(1,2)
console.log(b)
console.log(a)</code></pre>