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
注:应用范围实参不确定的情况下
原文地址:https://www.cnblogs.com/lanshu123/p/10566724.html
时间: 2024-11-10 01:38:17