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三个函数进行调用,
组合函数,就是对几个函数放在一个函数里执行;