函数式编程思维的目标:
程序执行时,应该把程序对结果以外的数据的影响控制到最小。
这样有助于提高程序的健壮性,也能帮我们清晰的了解程序的运行状态。

2.1 js多范式中的函数式

JavaScript 设计之初是向Java靠拢的同时,进行一些核心设定,即基于原型链继承的多范式语言。
比如使用闭包封装成员变量、通过高阶函数实现函数迭代、支持数组和她的基础函数组合子,方便开发者对集合进行操作。
在随后的发展中,EcmaScript标准也逐渐引入了一些诸如箭头函数、flatMap、更多数组组合子等内容。

2.1.1 闭包

闭包通常情况下指一个特殊的函数或者方法,内里绑定了函数内部引用的所有变量。这个函数或者方法把它引用的所有内容都放在一个上下文中闭合包裹起来。
当函数运行时,影响运行结果的输入,出了传入的参数外,还有自由变量。

闭包实现的单例