JavaScript函数的arguments对象、重载问题

一、arguments对象概述:

    1、ECMAScript 函数不介意传递进来多少参数,也不会因为参数不统一而错误。

    2、函数体内可以通过 arguments 对象来接收传递进来的参数,并且保存函数参数

function box() {

     return arguments[0]+' | '+arguments[1]+' | '+arguments[5]; //得到每次参数的值,最后结果是1 | 2 | 6

}

alert(box(1,2,3,4,5,6)); //传递参数

 

 

 

 

二、arguments 的length 属性:

    arguments 对象的下的length 属性可以得到参数的数量。

function box() {

   return arguments.length; //得到 6

}

alert(box(1,2,3,4,5,6));

    利用 length 这个属性,来智能的判断有多少参数,然后把参数进行合理的应用。比如,要实现一个加法运算,将所有传进来的数字累加,而数字的个数又不确定。

function box() {

        var sum = 0;

        if (arguments.length == 0){

            return sum;  //如果没有参数,退出

        }else{

            for(var i = 0;i < arguments.length; i++) {             //如果有,就累加

                sum = sum + arguments[i];

            }

            return sum;                                         //返回累加结果

        }

    }

alert(box(5,9,12));

 

 

 

三、arguments 的callee 的属性

  是一个指针,指向拥有这个 arguments 对象的函数

    1、简单的一个递归:

  function box(num) {

        if (num <= 1) {

            return 1;

        } else {

            return num * box(num-1); //一个简单的的递归

        }

    }

    alert(box(4));//4*3*2*1 = 24  结果是24

    2、递归算法

      对于阶乘函数一般要用到递归算法,所以函数内部一定会调用自身

      如果函数名不改变是没有问题的,但一旦改变函数名,内部的自身调用需要逐一修改

      为了解决这个问题,我们可以使用 arguments.callee 来代替。

  function box(num) {

        if (num <= 1) {

            return 1;

        } else {

            return num * arguments.callee(num-1);       //使用 callee 来执行自身,实现递归

        }

    }

    alert(box(4));//结果也是24

 

 

 

 

 

四、函数的重载问题

    ECMAScript 中的函数,没有像其他高级语言那种函数重载功能。(如果有相同名称的函数,则以最后一个为主)

function box(num) {

     return num + 100;

}

function box (num) {                     //会执行这个函数

    return num + 200;

}

alert(box(50));                         //返回结果是250,即调用的是第二个函数
function box(num,a) {

    return num + 100;

}

function box (num) {                     //会执行这个函数

     return num + 200;

}

alert(box(50,3));                         //结果还250  说明还是执行第二个函数  

 

你可能感兴趣的:(JavaScript)