介绍
-
当一个函数有多个参数时先传递一部分参数调用它
-
然后返回一个新函数接收剩下参数,返回结果
lodash中的柯里化函数
const _ = require('lodash')
function getSum (a, b, c) { return a + b + c }
// 柯里化后的函数
let curried = _.curry(getSum)
curried(1, 2, 3)
curried(1)(2)(3)
curried(1, 2)(3)
实现原理
利用 bind
方法返回的函数来接收参数
function sum(a,b,c){
return a+b+c
}
// 模拟柯里化函数
function curry(fn){
return function br(){
let length = fn.length;
if (arguments.length>=length ){
return fn.apply(fn, arguments);
}else{
return br.bind(null, ...arguments);
}
}
}
let curried = curry(sum);
console.log(curried(1)(2)(3));
console.log(curried(1,2)(3));
console.log(curried(1, 2,3));
作用
- 把多元函数转化成一元函数
- 柯里化可以让我们传递一部分参数给函数,得到一个已经"缓存"了某些固定参数的新函数
- 让函数变得灵活,函数粒度更小