JavaScript中的函数

Function arguments在ECMAScript中的行为并不像其他大多数语言中的函数参数。

ECMAScript中的函数在定义时不必指定是否返回值。实际上,任何函数在任何时候都可以通过return语句后跟要返回的值来实现返回值。函数会在执行完return语句之后停止并立即退出,位于return语句之后的任何代码都永远不会执行。

参考:

函数的基本语法如下所示:

实际上,在ECMAScript中有一个 arguments 对象,当 function 有参数传入的时候,可以根据索引去获取这个 arguments 对应的值。

没有重载

ECMAScript函数不能像传统意义上那样实现重载。如前所述,ECMAScript函数没有签名,因为其参数是由包含零或多个值得数组来表示的。而没有函数签名,真正的重载是不可能做到的。
  如果在ECMAScript中定义了两个名字相同的函数,则该名字只属于后定义的函数。

发生这种现象的原因是在 ECMAScript 中 arguments 代表的是一个内部的 array,这个 array 有0个元素是可以的,包含多个元素也是可以的。

function functionName(arg0, arg1,...,argN) {
    statements
}

在 arguments 中,可以通过索引的方式获取对应的值,例如第一个参数是 arguments[0] ,第二个是 arguments[1] 等等。

理解参数

ECMAScript函数不介意传递进来多少个参数,也不在乎传进来参数是什么数据类型。也就是说,即便你定义的函数只接受两个参数,在调用这个函数式也未必一定要传递两个参数,可以传递一个、三个甚至不传递参数。之所以会这样,是因为ECMAScript中的参数在内部是用一个数组来表示的。函数接受的始终都是这个数组,而不关心数组中包含哪些参数(如果有参数的话)。实际上,在函数体内可以通过arguments对象来访问这个参数数组,从而获取传递给函数的每一个参数。
  其实,arguments对象只是与数组类似(它并不是array的实例),因为可以使用方括号语法访问它的每一个元素,使用length属性来确定传递进来多少个参数。
  ECMAScript函数有一个重要的特点:命名的参数只提供便利,但不是必需的。通过访问arguments对象的length属性可以获知有多少个参数传递给了函数,开发人员可以利用这一点让函数能够接收任意个参数并分别实现适当的功能,可以基本实现重载功能。
  关于arguments的行为,还有一点比较有意思。那就是它的值永远与对应命名参数的值保持同步。不过,这并不是说读取arguments和参数这两个值会访问相同的内存空间;它们的内存空间是独立的,但他们的值会同步。另外要记住,arguments对象的长度是由传入的参数个数决定的,不是由定义函数时的命名参数的个数决定的。
  关于参数还要记住最后一点:没有传递值的命名参数将自动赋予undefined值。
  严格模式对如何使用arguments对象做出了一些限制,重写arguments的值会导致语法错误(代码将不会执行)。
**   注意:ECMAScript中的所有参数传递的都是值,不可能通过引用传递参数。 **

不像其他的语言,定义的函数命名了参数并不一定非要编写与之签名一致的函数,也没有强制验证命名参数。

在ECMAScript中,function 并不关心有多少个参数传入函数中,也不关心传入参数的数据类型。

http://www.w3school.com.cn/js/pro_js_functions_arguments_object.asp

当你定义了一个有两个参数的函数时,并不意味着你一定要传递两个参数,

本文由金沙官网线上发布于Web前端,转载请注明出处:JavaScript中的函数

您可能还会对下面的文章感兴趣: