# 1. 函数式编程能解决的问题
- 可扩展性–我是否需要不断地重构代码来支持额外的功能?
- 易模块化–如果我更改了一个文件,另一个文件是否会受到影响?
- 可重用性–是否有很多重复的代码?
- 可测性–给这些函数添加单元测试是否让我纠结?
- 易推理性–我写的代码是否非结构化严重并难以推理?
# 2. 学习之前你需要了解的一些概念
# 函数输入
在数学中,函数总是获取一些输入值,然后给出一个输出值。
但在程序中,它或许有许多个输入值,或许没有。它或许有一个输出值( return 值),或许没有。
从上述的定义出发,所有的函数都需要输入。
大多数情况下,人们把函数的输入值称为 “arguments” 或者 “parameters” 。所以它到底是什么?
arguments 是你输入的值(实参), parameters 是函数中的命名变量(形参),用于接收函数的输入值。例子如下:
function fn (x, y) {
console.log(x, y)
}
fn(3, 4)
// 3, 4
@前端进阶之旅: 代码已经复制到剪贴板
3 和 4是函数 fn(..) 调用的 arguments。x 和 y 是 parameters,用于接收参数值(分别为 3 和 4 )。
在javascript中定义的形参和实参可以是不等的:
function fn (x, y) {
console.log(x, y)
}
fn(3)
// 3, undefined
@前端进阶之旅: 代码已经复制到剪贴板
你传入少于声明形参个数的实参,所有缺少的参数将会被赋予 undefined 变量,意味着你仍然可以在函数作用域中使用它,但值是 undefined。
# 输入计数
一个函数所“期望”的实参个数是取决于已声明的形参个数,即你希望传入多少参数。
如以下函数:
function fn (x, y, z) {
console.log(x, y, z)
}
@前端进阶之旅: 代码已经复制到剪贴板
fn期望三个参数,因为它声明了三个形参。这里有一个特殊的术语:Arity。Arity 指的是一个函数声明的形参数量。 fn(..) 的 Arity 是 3。
# 函数的length
你可能需要在程序运行时获取函数的 Arity,使用函数的 length 属性即可。
