JavaScript是一门优雅的语言, 这个'优雅'体验在JS逻辑层次处于高段位的水平, 什么意思呢, 就是一个js应用的主线剧情必定所有是函数式表达的高层可读逻辑, 仍是不懂? 再举个栗子: node
一个node.js应用程序中index.js文件里面历来都不会出现一些封装的工具好比斐波那契求和函数, 也不会出基础现常量表达式好比数值, 字符串, 正则表达式, 由于这些都属于数据而不是代码!!程序员
若是你的主线文件(好比index.js)中出现了8080, "很差, 数据404了", /^[^ ]{5}$/, 之类的本应该写在配置文件中的数据, 说明你还不是一个优雅的程序员😝~正则表达式
永远要记住, 数据与代码的区别!!!express
什么是函数式编程???编程
函数式编程是种编程方式,它将电脑运算视为函数的计算。函数编程语言最重要的基础是λ演算(lambda calculus),并且λ演算的函数能够接受函数看成输入(参数)和输出(返回值)。 api
和指令式编程相比,函数式编程强调函数的计算比指令的执行重要。数组
和过程化编程相比,函数式编程里函数的计算可随时调用。异步
函数式编程的核心是表达式(expression), 众所周知JavaScript中一切都是表达式, 表达式的排列组合构成了世间万物. 因此理想状态下代码中是不该该存在语句的, 但是目前js仍是有许多常见的语句好比变量声明语句(var, let, const), 逻辑控制语句(if, for, try&catch), 该怎么办呢, 这些语句其实均可以用函数表达式来替代! 下面听我一一分析(*^__^*) ……编程语言
可是先记住, 将语句所有替换成表达式是有代价的, 好比👇函数式编程
js语句某种意义上增长了语法多样性的美
可是无所谓, 为了实现我函数式编程语言的大一统, 语句必须被封杀, 语法多样性咱们不是有异步机制来带的各类新奇语法吗🙄..
if判断语句能够用3元运算符“条件表达式A?表达式1:表达式2”来简单替代, 条件表达式A就是if中的bool数据, 同时也能够替代if的嵌套. if不是重点由于可能不少看官发现了, 复杂状况下用3元来替代if实在是太丑了, 彻底丧失了可读性, 我也不推荐这种强扭的替换, 只是为了证实, if语句并非不可替代的.
重点来啦!!
JavaScript中全部的循环语句, 不管是for仍是while, 均可以通通用Array.prototype的map,filter,find,some,every,forEach来替代👍👍(强烈推荐)
循环一般要遍历一个数组, 利用数组原生提供的这些方法能够完美的知足各类功能, 不只从语法上取代了传统循环尴尬的表现力, 更从api的层面上扩展了丰富的方法, 这里就不一一展开说明了. 利用数组替代循环还须要注意如下的Q&A:
手动构造一个数组很是简单:
若是须要循环count = 10次的任务, 构造一个长度为count的数组便可:
Array.from({length: count}).forEach
还有种更暴力的办法: new Array(count).forEach
so easy.
find回调返回true, some回调返回true, every回调返回false: 这3种方法能够完美的中断数组的遍历😝
除此以外continue关键字也能够用return替代!
解决方案: catch关键词变成catch方法
好比Promise的catch就完美的封装了异常捕获机制
首先, 函数式和面向对象是并不互斥
函数式是对面向对象的升华, 取其精华去其糟粕, 继承并扩展了对象分装的哲学同时也削减了臃肿的继承机制.
将来, 面向对象的编程思想依然存在, 但函数式编程风格, 即基于事件的非阻塞引擎, 精简语义化的主线剧情, 以表达式为基本元素的代码块将成为编程界新的风景线.