使用 arguments 对象

arguments 对象表示参数集合,它是一个伪类数组,拥有与数组相似的结构,可以通过数组下标的形式访问函数实参值,但是没有基础 Array 的原型方法。 

//函数没有定义形参,但是在函数体内通过 arguments 对象可以获取传递给该函数的每个实参值。 
function f () { //定义没有形参的函数
    for(var i = 0; i < arguments.length; i++ ) {  //循环读取函数的 arguments 对象 
        alert(arguments[i]);  //显示指定下标的实参的值
    }
}
f(3, 3, 6); //逐个显示每个传递的实参
通过修改arguments对象的 length属性值,也可以达到改变函数实参个数的目的。当 length 属性值增大时,则增加的实参值为 undefined,如果 length 属性值减小,则会丢弃arguments 数据集合后面对应个数的元素。 
function f(){ 
    arguments.length = 2  //修改 arguments 对象的 length 属性值
    for(var i = 0; i < arguments.length; i++ ) { 
        alert(arguments[i]);
    }
}
f(3, 3, 6); //返回提示 3、 3

使用 callee 回调函数

arguments 对象包含一个 callee 属性,它引用当前 arguments 对象所属的函数,使用该属性可以在函数体内调用函数自身(arguments.callee())。在匿名函数中,callee 属性比较有用,利用它可以设计函数选代操作。 

//使用 arguments.callee 获取匿名函数,然后通过函数的 length 属性获取函数形参个数,最后比较实参与形参个数以检测用户传递的参数是否符合要求。 
function f (x, y, z) { 
    var a = arguments.length; //获取函数实参的个数
    var b =arguments.callee.length; //获取函数形参的个数 
    if (a != b) { //如果形参和实参个数不相等,则提示错误信息 
        throw new Error("传递的参数不匹配");
    } else {    ///如果形参和实参数目相同,则返回它们的和
        return x + y + z; 
    }
}
alert(f(3, 4, 5)); //返回值为 12

注:应用范围实参不确定的情况下

posted @ 2019-03-20 18:20  空瓶子装满了  阅读(258)  评论(0编辑  收藏  举报