1.10 函数
可以通过函数声明的方式来定义函数:
上面的代码定义了函数add,它有两个参数:param1和param2,返回值是这两个参数的和。可以这样去调用这个函数:
除此之外,我们还可以通过给变量add赋值为函数表达式的方式来定义add函数:
函数表达式会产生一个值,因此可以将函数作为参数直接传递给另外的函数:
1.10.1 函数声明的提升特性
函数声明具有提升特性——它们的实体会被移动到所在作用域的开始处。这使得我们可以引用后面声明的函数。
注意,var声明也具有提升的特性(参见1.13.2“变量的提升特性”),但通过它们执行的赋值却不具备该特性:
1.10.2 特殊的变量arguments
在JavaScript中,函数的所有参数都可以被自由调用,它会通过arguments变量来使所有参数可用。arguments看起来像个数组,但却不具备数组的方法:
1.10.3 参数太多或太少
我们可以通过以下函数来探知,在JavaScript中,函数参数太多或太少是如何处理的(toArray()函数会在1.10.6“将arguments转换为数组”中出现):
额外的参数会被忽略(arguments除外):
丢失的参数会得到undefined这个值:
1.10.4 可选参数
以下是一个给参数赋上默认值的通用模式:
在标记了(1)的这行,||运算符会在x为真值的时候(非null、undefined等值)返回x,否则,会返回第二个运算数:
**1.10.5 强制参数长度
**如果想强制一个参数长度(指定的参数长度),可以通过arguments.length来检查:
1.10.6 将arguments转换为数组
arguments不是数组,它只是类似于数组(参见17.15.3“类似数组的对象和泛型方法”)。它有length属性,可以通过方括号去访问它的元素。不能移除它的元素,也不能对它调用数组的方法。因此,有时候会需要将它转换成数组,方法如以下函数所示(在17.15.3“类似数组的对象和泛型方法”中会有详细介绍):