JS高级—05—纯函数、柯里化、组合函数

一、纯函数

三种编程思想:

面向过程编程、面向对象编程、函数式编程;

 

1.相同的输入,要有相同的输出;所以不能依赖外部的变量,否则外部的变量改后,再输入相同的输入,将不会有相同的输出;

2.不能产生任何副作用;比如修改了全局变量、修改了传进来的参数;

 

 

优势:

1.安心写,只需要关注参数和返回值

2.安心用:

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

二、柯里化

闭包➕柯里化,可以很方便的进行逻辑复用;

 

柯里化的优势:

  • 1.让函数的职责单一; 单一职责原则
  • 2.复用参数逻辑;使用柯里化函数可以定制很多函数,后续再使用剩下的参数进行运算;主要是对某一部分做一个复用;(2‘00‘‘)比如说vue3有个渲染器就是可以自定制的;

 

 

function makeAdd(base, num1, num2) {  //234
 
  let doubleBase,result1,result2 = null;

  doubleBase = base * base; //4
  result1 = num1 + doubleBase; //7
  result2 = result1 + num2; //11

  return doubleBase + result1 + result2; //22
}

function curry(base) {
  let doubleBase,result1,result2 = null;

  doubleBase = base * base;
  return function (num1) {
    result1 = num1 + doubleBase;
    return function (num2) {
      result2 = result1 + num2;
      return doubleBase + result1 + result2;
    };
  };
}

function autoCurryTool(fn) {
   function curried(...args) {
    if (args.length >= fn.length) {
      //   fn.apply(this, args);
      return fn(...args);
    } else {
      return function (...args2) {
        return curried(...[...args, ...args2]);
      };
    }
  };

  return curried;
}

console.log(makeAdd(2, 3, 4));
console.log(curry(2)(3)(4));
const newFn = autoCurryTool(makeAdd);
console.log(newFn(2)(3)(4));

 

 

 

 

 

 

 让函数的职责单一;复用参数逻辑;

 

 

 

 

 

 

 

 

 

 

 

 

 

三、组合函数

 

 

能否立即为将一个函数再度拆分?

 

组合函数的好处到底是什么?

     组合,可以将一个大函数划分成各个小的兄弟函数,这样每一个兄弟函数的指责单一,这样大函数如果想增加功能,直接再加一个兄弟函数即可,可以不用修改其他兄弟函数;可拓展易维护;

    https://juejin.cn/post/6844903780329357320

为什么一般来说,组合优于继承?

这句话不准确,各个场景有各个场景的好处,继承可以多态;

 

//对某个数据,会有a、b、c三个函数进行调用,

组合函数,就是对几个函数放在一个函数里执行;

 

 

 

 

 

posted @ 2022-05-13 20:34  Eric-Shen  阅读(79)  评论(0编辑  收藏  举报