
上QQ阅读APP看书,第一时间看更新
3.7 可选参数
JavaScript允许编写以下代码并且没有任何问题地执行它:

我们只用一个参数定义了square。然而,当我们用三个参数调用它时,JavaScript语言不会抱怨。它忽略了额外的参数并计算了第一个参数的平方。
JavaScript对于传递给函数的参数数量极为宽容。如果传递太多参数,则会忽略额外的参数。
如果传递的参数太少,则缺少的参数将被赋值为undefined。
这样做的缺点是,你可能偶然会将错误数量的参数传递给函数。而没有人会告诉你这件事。
好处是,此行为可用于允许使用不同数量的参数调用的函数。例如,以下minus函数试图通过对一个或两个参数进行操作来模仿-运算符:

如果在参数之后写一个=运算符,后跟一个表达式,那么将在未给出某参数时用此表达式的值替换该参数。
例如,下面版本的power使其第二个参数可选。如果你没有提供第二个参数或传递给它未定义的值,它将默认为2,并且此函数表现与square相同。

在下一章中,我们将看到一个函数体获取传递给它的参数列表的方法(参见4.13节)。这很有用,因为它使函数可以接受任意数量的参数。例如,console.log会执行此操作——它输出给定的所有值。
