Javascript中Arguments对象详解

Arguments对象只在函数体中定义。虽然技术上说来,它不是数组,但Arguments对象有带编号的属性,这些属性可以作为数组元素,而且它有length属性,该属性声明了数组元素的个数。它的元素是作为参数传递给函数的值。元素0是第—个参数,元素1是第二个参数,以此类推。所有作为参数传递的值都会成为Arguments对象的数组元素,无论函数声明中是否有这些参数的名字。

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);
所谓天才,只不过是把别人喝咖啡的功夫都用在工作上了。——鲁迅
0 不喜欢
说说我的看法 -
全部评论(
没有评论
关于
本网站属于个人的非赢利性网站,转载的文章遵循原作者的版权声明,如果原文没有版权声明,请来信告知:hxstrive@outlook.com
公众号