函数柯里化

有遇到如下的问题,初始看到的时候并没有一些解决思路,所以去看了一下函数柯里化。

柯里化(Currying)指的是将原来接受两个参数的函数变成新的接受一个参数的函数的过程。新的函数返回一个以原有第二个参数为参数的函数。

add(1);             // 1
add(1)(2);      // 3
add(1)(2)(3);// 6
add(1)(2, 3); // 6
add(1, 2)(3); // 6
知识点:对象(包括数组,对象,函数等)参与原始运算如算术或逻辑运算时,会无参调用其 toString 或者 valueOf 方法得到一个原始值,然后用这个原始值参与运算,。能够持续调用,必然返回函数,能够当成数值,那只能是因为它实现了 toString 或者 valueOf 方法。
var curring = () => {
  var result = [];
  var add = (...args) => {
    result = result.concat(args);
    return add;
  };
  
  add.toString = () => {
     return result.reduce((pre, cur) => pre + cur, 0);
  }
  return add;
};

var add = curring();
console.log(add(1)(2)(3)(4)(5)(6)); //21

add = curring();
console.log(add(1, 2)(3, 4)(5, 6)); //21

add = curring();
console.log(add(1, 2, 3, 4, 5, 6)); //21

看了一点,还是没吃透,后面再说,肝不动了.........

项目中感觉也不太用得到,这个是在情况下会用到呢,疑惑。

推荐阅读:https://juejin.cn/post/6864378349512065038

posted @ 2022-05-26 18:03  千亿昔  阅读(68)  评论(1编辑  收藏  举报