JavaScript中,函数是第一类对象(first-class objects)。凡是可以使用值的地方,就能使用函数。比如,可以把函数赋值给变量和对象的属性,也可以当作参数传入其他函数,或者作为函数的结果返回。唯一的特殊之处是函数是可执行的。
本文讨论JavaScript中函数的基本用法。
函数定义
JavaScript定义函数有以下方式:
function
命令
function fn(x,y) { |
- 函数表达式
let fn = function() { |
- 箭头函数
let fn = x => x*x // 只有一个参数时,括号可以省略 |
- 使用
Function
构造方法构造
let fn = new Function('x', 'y', 'return x + y') |
这种方法用得很少。
所有函数都是由Function
构造出来的,包括Object
,Array
,Function
。
函数参数
形参和实参
形参是我们定义函数时的参数
实参是调用函数时传过去的参数
function add(x, y) { // x, y是形参 |
JavaScript中,函数调用时,如果形参和实参数量不一致,不会报错。这点和Java不同。
如果实际传递的参数数量比形参数量少,那么没有对应实参的形参,值是
undefined
如果实际传递的参数数量比形参数量多,多出来的参数不会赋值给任何形参,但是在函数体内部可以通过
arguments
对象获取。
function add(x, y) { // x, y是形参 |
剩余参数
剩余参数已被加入ES6 标准。
为函数的最后一个命名参数前加上省略号(…)前缀,这个参数就变成了一个叫作剩余参数的数组,数组内包含着传入的剩余的参数。
function multiMax(first, ...rest) { |
只有函数的最后一个参数才能是剩余参数。
默认参数
默认参数已被加入ES6 标准。
function f(name, age=18){ |
arguments
由于 JavaScript 允许函数有不定数目的参数,所以需要一种机制,可以在函数体内部读取所有参数。这就是
arguments
对象的由来。arguments
对象包含了函数运行时的所有参数,arguments[0]
就是第一个参数,arguments[1]
就是第二个参数,以此类推。这个对象只有在函数体内部,才可以使用。
function sum() { |
注意:箭头函数里没有arguments
,箭头函数里的arguments
为undefined
。
除了可以通过arguments
获取到参数的值,也可以通过它在函数内部修改参数的值。不过,在严格模式下,不能通过arguments
修改参数值。
参考
Author: kpt
Permalink: http://kpt.ink/2021/08/03/JavaScript%E5%87%BD%E6%95%B0%E5%9F%BA%E7%A1%80/
文章默认使用 CC BY-NC-SA 4.0 协议进行许可,使用时请注意遵守协议。