关于JavaScript函数参数问题

ECMAScript函数的参数与大多数其他语言的参数有所不同,ECMAScript函数不介意传递进来多少个参数,也不在乎传递进来的参数的类型。也就是说即使你定义的时候定义了两个参数,但是在调用的时候也未必一定要传进来两个参数,可以传进来一个、三个或者一个都不传,而解析器永远也不会有异常。

这是什么原因么?

原因是EMCAScript中的参数在内部是用一个数组来表示的。函数接收到的始终都是一个数组,而不关心数组中的数。并且这个表示参数的数组实际上是可以用arguments对象来访问的,从而可以获取传递给函数的每一个参数。

关于arguments对象

arguments对象只是与数组类似,可以通过方括号语法来访问他的每一个元素,可以通过length属性来确定传递进来多少个参数。

并且我们可以像如下一样,不写函数参数的签名,直接用arguments对象来表示传入的参数:

function sayGodby () {
    alert("Godby" + arguments[0] + arguments[1]);        
}

这样当传入两个参数的时候就会正常的通过arguments对象来表示传入的参数来进行字符串的拼接之后输出。

还有重要的一点就是arguments对象的长度是由传入的参数决定的不是根据定义函数时的命名参数的个数决定的

这正说明了ECMAScript函数的一个重要特点:命名的参数只提供便利,但不是必须的。另外在参数命名方面,其他语言必须先创建一个函数签名,以后调用的时候必须与该签名一致。但是在ECMAScript中,解析器不会验证命名参数,没有这些约束的条条框框。

并且还有一点要注意的是没有传递值得命名参数将自动被赋予undefined,就好像定义变量又没初始化一样。

posted on 2017-04-27 11:11  我是小小小白  阅读(105)  评论(0)    收藏  举报

导航