偏函数知识
偏函数的理解。
其实偏函数和普通函数的区别就是,偏函数利用闭包的技术将需要的参数一部分保存下来,然后再下次调用的时候只需要输入另一部分常变的参数就好了。
// 普通函数
function add(a,b,c){
return a+b+c
}
// 调用普通函数
console.log(add(1,2,3));
// 偏函数制造工厂
function partial(fn,a){
return function(b){
return fn(a,b,c)
}
}
//调用方法
var parAdd = pratial(add,1);
console.log(parAdd(2,3));
// 利用bind
var obj = {}
obj.parAdd = add.bind(obj,1);
console.log(obj.parAdd(2,3));
柯理化和偏函数的区别
柯理化 是将多个参数的函数转化为每次输入一个参数的的方式调用。
偏函数是将一部分参数固定,另一部分参数需要输入。
// 基础柯理化
function curry(func) {
return function(a) {
return function(b) {
return func(a, b);
};
};
}
function sum(a, b) {
return a + b;
}
let carriedSum = curry(sum);
alert( carriedSum(1)(2) ); // 3
// 高级柯理化实现
function curry(func) {
return function curried(...args) {
if (args.length >= func.length) {
return func.apply(this, args);
} else {
return function(...args2) {
return curried.apply(this, args.concat(args2));
}
}
};
}
function sum(a, b, c) {
return a + b + c;
}
let curriedSum = curry(sum);
// still callable normally
alert( curriedSum(1, 2, 3) ); // 6
// get the partial with curried(1) and call it with 2 other arguments
alert( curriedSum(1)(3)(2) ); // 6