首页 > 代码库 > JS一步一步之Arguments

JS一步一步之Arguments

1、arguments[]数组只在函数体内定义。在函数体内,arguments引用该函数的Arguments对象,该对象有带有编号的属性,并作为一个存放传递给函数的所有参数的数组。标识符arguments本质是一个局部变量,在每个函数中都会被自动声明并被初始化。它只在函数体中才能引用Arguments对象,在全局代码中没有定义。

function arg(a,b){
    if(arguments[0]){
        alert(arguments[0]);
    }
    if(arguments[1]){
        alert(arguments[1]);
    }
}

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

3、arguments.callee属性引用当前正在运行的函数(无论函数是否命名,都可以使函数引用自身)。该属性只有在函数体内被定义。

var fac=function(a){
    if(a<2)
        return 1;
    else
        return a*arguments.callee(a-1);
}

var y=fac(5);

4、arguments.length属性 传递给当前函数的个数。这个属性声明的是实际传递给函数的参数个数

function check(args){
    var actual=args.length;
    var expected=args.callee.length;
    if(actual != expected){
        throw new Error("Wrong number of arguments:extected: "+expected +"; actually passed: "+actual);
    }
}

function f(x,y,z){
    check(arguments);
    return x+y+z;
}


参照:JavaScript权威指南

JS一步一步之Arguments