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  说明还是执行第二个函数  

 

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。