你不知道的JavaScript(十一)函数参数

JavaScript函数的定义和使用非常简单,我们看一下下面的代码:

    <script type="text/javascript">
        var sum = function(a,b){
            return a + b;
        }
        alert(sum(2,3));//5
    </script>

我们定义了一个sum函数,具有两个形参a、b,函数返回它们相加的结果。调用该函数的过程也很简单,sum(2,3)为函数的调用。

JS并不要求函数调用时的参数个数和定义时的形参个数保持一致,除了这种调用形式外,我们可以在调用sum函数时使用任意个参数,例如下面的形式也是允许的:

       alert(sum(2,3,4,5));//5
       alert(sum(1));//NaN

第一行代码中,我们调用sum函数时多指定两个参数,这在一些强类型的语言中会出现编译错误,但是JS支持这种语法。由于我们只使用到了前面两个参数,所以函数的返回结果为5。

第二行代码中我们只指定了一个参数,第二个参数则为undefined,相加结果为NaN。

实际上JS每一个函数内部都有一个名为arguments的数组,该数组中存放函数调用时的所有参数,也就是说我们定义函数时指定形参的目的也仅仅是为了在函数引用参数方便而已,有了这个数组我们就可以在定义任何函数时都不指定形参。

因此上面的求和函数也可以写成下面这种形式:

    <script type="text/javascript">
        var sum = function(){
            return arguments[0] + arguments[1];
        }
        alert(sum(1,2));//3
    </script>

但是从代码的可读性上讲,我们通常并会去这么写代码。

只要保证堆栈不溢出,JS函数在调用时可传入任意多个参数,这种特性能为我们带来很多好处,例如我们可以写一个函数来求取任意个数相加的和:

    <script type="text/javascript">
        var sum = function(){
            var result = 0;
            //注意:遍历数组可以使用in关键字
            for(i in arguments)
            {
                result += arguments[i];
            }
            return result;
        }
        alert(sum(1,2));//3
        alert(sum(3,4,6));//13
        alert(sum(1,3,5,6,3,20));//38
    </script>

从某种程度上讲,JS函数的这种特性比c++、java语言中函数重载要好用。

这里需要注意的是arguments为数组,我们在遍历时除了使用下面的形式外:

 for(i=0; i < arguments.length; i++)

还可以使用in关键字,如下面形式:

for(i in arguments)

演示代码地址:https://github.com/rongbo-j/you-dont-know-js

原文地址:https://www.cnblogs.com/lanzhi/p/6468784.html