![JavaScript编程精解(原书第3版)](https://wfqqreader-1252317822.image.myqcloud.com/cover/171/30573171/b_30573171.jpg)
上QQ阅读APP看书,第一时间看更新
3.7 可选参数
JavaScript允许编写以下代码并且没有任何问题地执行它:
![](https://epubservercos.yuewen.com/8B8394/16679181805565906/epubprivate/OEBPS/Images/figure_0049_0003.jpg?sign=1738810352-YDc6YUKyD5cMMAHKLCoDlAzoZvFZ0jpf-0-7dcbffe3bd2cba24203f428fd2b774ee)
我们只用一个参数定义了square。然而,当我们用三个参数调用它时,JavaScript语言不会抱怨。它忽略了额外的参数并计算了第一个参数的平方。
JavaScript对于传递给函数的参数数量极为宽容。如果传递太多参数,则会忽略额外的参数。
如果传递的参数太少,则缺少的参数将被赋值为undefined。
这样做的缺点是,你可能偶然会将错误数量的参数传递给函数。而没有人会告诉你这件事。
好处是,此行为可用于允许使用不同数量的参数调用的函数。例如,以下minus函数试图通过对一个或两个参数进行操作来模仿-运算符:
![](https://epubservercos.yuewen.com/8B8394/16679181805565906/epubprivate/OEBPS/Images/figure_0050_0001.jpg?sign=1738810352-SeE9TBvEMUwlHa0SD2DrFhLZqhXdmo7s-0-f5772a761144c4fa28a56169a301e3db)
如果在参数之后写一个=运算符,后跟一个表达式,那么将在未给出某参数时用此表达式的值替换该参数。
例如,下面版本的power使其第二个参数可选。如果你没有提供第二个参数或传递给它未定义的值,它将默认为2,并且此函数表现与square相同。
![](https://epubservercos.yuewen.com/8B8394/16679181805565906/epubprivate/OEBPS/Images/figure_0050_0002.jpg?sign=1738810352-p8cc9Rh9XON2WeHNnTOFqkb5jayjS2Xj-0-516514a58199208fb7effe88bdeddd6f)
在下一章中,我们将看到一个函数体获取传递给它的参数列表的方法(参见4.13节)。这很有用,因为它使函数可以接受任意数量的参数。例如,console.log会执行此操作——它输出给定的所有值。
![](https://epubservercos.yuewen.com/8B8394/16679181805565906/epubprivate/OEBPS/Images/figure_0050_0003.jpg?sign=1738810352-vxmdJQlVeJeloL6hOr6EFT9ozp4V1Agv-0-bf43030bc8c63dbe5589e4e198ff37f2)