首页 > 代码库 > javaScript函数式编程-包含闭包、链式优化及柯里化
javaScript函数式编程-包含闭包、链式优化及柯里化
本文着重介绍个人理解的函数式编程。
函数式编程个人理解为:以函数为主要载体的编程方式。
好处:
- 语义更加清晰
- 可复用性高
- 可维护性好
- 作用域局限、副作用少
基本函数式编程:
//实现数组中每个单词首字母大写 //一般写法 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,未完待续、、、
javaScript函数式编程-包含闭包、链式优化及柯里化
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。