Arguments对象只在函数体中定义。虽然技术上说来,它不是数组,但Arguments对象有带编号的属性,这些属性可以作为数组元素,而且它有length属性,该属性声明了数组元素的个数。它的元素是作为参数传递给函数的值。元素0是第—个参数,元素1是第二个参数,以此类推。所有作为参数传递的值都会成为Arguments对象的数组元素,无论函数声明中是否有这些参数的名字。
Arguments描述:
当一个函数被调用时,会为该函数创建一个Arguments对象,局部变量arguments也会自动地初始化以便引用那个Arguments对象。Arguments对象的主要用途是提供一种方法,用来确定传递给函数的参数个数并且引用未命名的参数。除了数组元素和属性length之外,属性callee可以使未命名的函数引用自身。
大多数情况下,可以将Arguments对象看做是具有callee属性的数组。但它不是Array类的实例,Arguments.1ength属性没有Array.1ength属性的专有行为,所以不能用它来改变数组的大小。
Arguments对象有一个非常特殊的特性。当函数具有命名的参数时,Arguments对象的数组元素是存放函数参数的局部变量的同义词。Arguments对象和参数名提供了引用同一个变量的两种不同方法。用参数名改变参数值,会改变用Arguments对象得到的值,改变用Arguments对象得到的参数值,也会改变用参数名得到的值。
Arguments的属性:
1、callee
对当前正在执行的函数的引用。如下利用callee来实现定时器:
(function(){ setTimeout(function(){ var obj = document.getElementById("dateDiv"), date = new Date(); obj.innerHTML=date.getHours()+":"+date.getMinutes()+":"+date.getSeconds(); setTimeout(arguments.callee, 1000); // 启动下一个定时器 }, 0); })();
2、length
传递给函数的参数个数,同时也是Arguments对象中的数组元素个数。如下:
function testArguments(name, age) { alert(arguments.length); // 2 } testArguments("tom", 23);