函数
ECMAScript中函数用关键词function
来声明:
function functionName(arg0, arg1){ |
返回值
定义函数的时候并不需要指定返回值,你只需要在需要返回的时候返回某个值或者直接返回即可:
|
从上面的例子可以看出,函数始终会返回一个值,如果没有return语句或者return后没有接返回值,函数自动返回的undeifined
参数
ECMAScript的参数跟大多数语言是不同的,采用了一种和松散也很灵活的方式去处理参数。
- ECMAScript函数不介意传递进来多少个参数,完全可以跟声明的参数个数不一致;
- 也不介意传进来的参数是什么数据类型,这一点很明显,因为声明函数的时候压根就没指定参数类型;
对于参数个数,其实在ECMAScript内部是用一个数组来表示参数的,函数接受到的始终是这个数组,所以参数多少个都是ok的。而且在函数内部,还可以通过arguments
对象来访问这个参数数组,从而获取传递进来的每一个参数。所以下面两个函数其实是等价的:
function sum1(num1, num2){ |
在sum2
中都不包含命名的参数,但是函数功能依旧,依旧可以传递参数进来。所以命名参数只是为了提供便利,而不是必须的
其实arguments
对象只是跟数组类似,它并不是Array的实例,尽管你可以通过下标获取参数,也可以通过length
来获取参数的个数。
关于命名参数和arguments
你可以完全的混用,而且arguments
对象的值永远和命名参数是同步的,修改一个,对应的就会改变。
|
这里需要注意的是:如果sum
只传进来一个参数时,num2不会随着arguments
的改变而改变,而保持undefined
最后,ECMAScript中的所有参数都是按值传递,而没有引用传递。
没有重载
如前所诉,ECMAScript不限定参数的类型和个数,所以函数也不存在签名,也没办法像其他语言一样根据参数的个数和类型不同来实现重载,在ECMAScript中,如果定义了两个相同名字的函数,则后定义的函数会直接覆盖之前的定义:
|
在ECMAScript中可以直接根据参数不同来做出不同的反应,来模仿重载。