偏函数知识

偏函数的理解。

其实偏函数和普通函数的区别就是,偏函数利用闭包的技术将需要的参数一部分保存下来,然后再下次调用的时候只需要输入另一部分常变的参数就好了。

// 普通函数
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