本文着重介绍个人理解的函数式编程。
函数式编程个人理解为:以函数为主要载体的编程方式。
好处:
- 语义更加清晰
- 可复用性高
- 可维护性好
- 作用域局限、副作用少
基本函数式编程:
//实现数组中每个单词首字母大写 //一般写法 const arr = [‘apple‘,‘orange‘,‘pear‘]; for(const i in arr) { const c = arr[i][0]; arr[i] = c.toUpperCase() + arr[i].slice(1); //slice()从已有的数组中返回选定的元素 } console.log(arr); //函数式写法 function upperFirst(word) { return word[0].toUpperCase() + word.slice(1); } function wordToUpperCase(arr) { return arr.map(upperFirst); } console.log(wordToUpperCase([‘apple‘,‘orange‘,‘pear‘]));
链式优化
从上面的函数式写法中可以看出有多层嵌套,即很容易产生横向延展。
如:
//计算数字之和 //一般写法 console.log((3 + 4 + 5) * 7); //函数式写法 function sum(a, b) { return a + b; } function mul(c, d) { return c * d; } console.log(mul(sum(sum(3, 4), 5), 7));
这种情况可读性下降,我们可以选择其他可读性更高的方式,比如下面这种链式优化
//优化写法lodash的链式写法 const utils = { chain(a) { this._temp = a; return this; }, sum(b) { this._temp += b; return this; }, mul(c) { this._temp *= c; return c; }, value() { const _temp = this._temp; this._temp = undefined; return _temp; } }; console.log(utils.chain(3).sum(4).sum(5).mul(7).value());
常见的函数式编程模型
闭包
可以保留局部变量不被释放的代码块,被称为一个闭包
如以下代码创建一个闭包
// 创建一个闭包 function makeCounter() { let k = 0; return function() { return k++; }; } const counter = makeCounter(); console.log(counter()); // 0 console.log(counter()); // 1
闭包的创造条件是:
- 存在内、外两层函数
- 内层函数对外层函数的局部变量进行了引用
闭包的弊端
持久化变量不会被正常释放,持续占用内存空间,很容易造成内存浪费,所以一般需要一些额外手动的清理机制。
个人理解:
现在暂时没有系统的学习js,只是最近暂时行的接触到函数式编程。
so,未完待续、、、
时间: 2024-11-03 21:18:20