js中arguments理解

来源:互联网 发布:php代码加密 编辑:程序博客网 时间:2024/05/16 06:33

在js中一切都是对象,连函数也是对象,函数名其实是引用函数定义对象的变量。

1、什么是arguments?

这个函数体内的arguments非常特殊,实际上是所在函数的一个内置类数组对象,可以用数组的[i]和.length。

2、有什么作用?

js语法不支持重载!但可用arguments对象模拟重载效果。

arguments对象:函数对象内,自动创建的专门接收所有参数值得类数组对象。
arguments[i]: 获得传入的下标为i的参数值
arguments.length: 获得传入的参数个数!

重载的定义是指函数的方法名相同,但参数不同。比如我写两个关于js的同名函数:

输出结果为NaN  9,这就说明后面的函数把前一个同名函数覆盖掉了,从而可以得出js函数不存在重载,永远调用最后一个方法。

虽说JS函数不存在重载,但是我们可以实现js里面的模拟重载,接下来见证奇迹的时刻到了。要想实现js模拟重载必先回用到 arguments.用来存放js参数。实现方法如下:

上述例子中本意是想让同名函数sum()根据参数不同输出不同结果,但是sum是函数名字,本质也是个变量,

第二个会覆盖第一个,所以上述的正确输出答案是:NaN,9.所以这样显然不可以。

如果用arguments,就简单多了。

如下2个例子:

复制代码
//2、    function calc(){        //如果用户传入一个参数,求平方        if(arguments.length==1){            console.log(arguments[0]*arguments[0]);        }else if(arguments.length==2){        //如果用户传入两个参数,就求和            console.log(arguments[0]+arguments[1]);        }    }    calc(4); //16    calc(4,5); //9
复制代码
复制代码
/*3、无论用户传入几个数字,都可以求和*/    function add(){        //arguments:[]        //遍历arguments中每个元素,并累加        for(var i=0,sum=0;i<arguments.length;sum+=arguments[i++]);        return sum;//返回和    }    console.log(add(1,2,3)); //6    console.log(add(1,2,3,4,5,6)); //21
复制代码

这就是JS利用arguments重载的效果,简单理解就是一个函数重复利用.

arguments.length是有实参决定,即函数调用时候里面的参数个数决定!

其实Javascript并没有重载函数的功能,但是Arguments对象能够模拟重载。Javascrip中国每个函数都会有一个Arguments对象实例arguments,它引用着函数的实参,可以用数组下标的方式"[]"引用arguments的元素。arguments.length为函数实参个数,arguments.callee引用函数自身。

 

arguments他的特性和使用方法

特性:

arguments对象和Function是分不开的。因为arguments这个对象不能显式创建,arguments对象只有函数开始时才可用。

使用方法:

虽然arguments对象并不是一个数组,但是访问单个参数的方式与访问数组元素的方式相同

例如:

arguments[0],arguments[1],。。。。。。。。arguments[n],

 

在js中 不需要明确指出参数名,就能访问它们,例如:

function test(){

var s;     

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

  s+=arguments[i]+",";
     }

return s;
}

test("name","age")

 

输出结果:

name,age

 

我们知道每一个对象都有自己的属性,arguments对象也不例外,首先arguments的访问犹如Array对象一样,
用0到arguments.length-1来枚举每一个元素。下面我们来看看callee属性,返回正被执行的 Function对象,
也就是所指定的 Function 对象的正文。callee 属性是 arguments 对象的一个成员,仅当相关函数正在执行时才可用。
callee 属性的初始值就是正被执行的 Function 对象,这允许匿名的递归函数。
var sum=function(n){

   if(1==n) {

   return 1;

   } else {

  return n + arguments.callee(n-1);

  }

}

alert(sum(6));

 通俗一点就是,arguments此对象大多用来针对同个方法多处调用并且传递参数个数不一样时进行使用。根据arguments的索引来判断执行的方法。

 

1 0
原创粉丝点击