函数柯里化是一个很有意思的话题,用起来也非常的神奇有趣。以前的我不太想深入的去了解这个话题,今天做了一些例子放在下面,加深理解。
在计算机科学中,柯里化(英语:Currying),又译为卡瑞化或加里化,是把接受多个参数的函数变换成接受一个单一参数的函数,并且返回接受余下的参数而且返回结果的新函数的技术。
https://zh.wikipedia.org/wiki/%E6%9F%AF%E9%87%8C%E5%8C%96
简单理解,就是将一个可以接受多个参数的函数转化成可以接受任意个数参数的函数。我们可以将 curry
函数简化成这样:
function curry(fn){
return function curried(...arg){
if(arg.length >= fn.length){
return fn.apply(this, arg)
} else {
return function (...arg2) {
return curried.apply(this, arg.concat(arg2))
}
}
}
}
我们结合 Math.hypot
方法(这个方法是用来求平方根的)来看一下怎么使用。
curry(Math.hypot)()()()(3,4) // 5
curry(Math.hypot)()()(3,4) // 5
curry(Math.hypot)(3)(4) // 5
上面三种调用方式会输出同样的结果,是不是很酷。
为什么要 currying?
因为我们可以传入一个参数,相当于把这个结果给缓存起来备用了。
《函数柯里化》有一个想法