arguments 是JavaScript里的一个内置对象,它很古怪,也经常被人所忽视,但实际上是很重要的。
所有主要的js函数库都利用了arguments对象。
所有的函数都有属于自己的一个arguments对象,它包括了函所要调用的参数。
他不是一个数组,而是一个类数组对象,
如果用typeof arguments,返回的是'object'。
虽然我们可以用调用数据的方法来调用arguments。比如length,还有index方法。但是数 组的push和pop对象是不适用的。
看起来貌似argument对象使用起来十分有限,但是实际上它是一个非常有用的对象。
你可以通过使用argument对象让函数能够调用数量不定 的参数。
也就是说arguments对象的长度是由实参个数而不是形参个数决定的。
形参是函数内部重新开辟内存空间存储的变量,但是其与arguments对象内存空间并不重叠。
对于arguments和值都存在的情况下,两者值是同步的,但是针对其中一个无值的情况下,对于此无值的情形值不会得以同步。
如下代码可以得以验证。
function f(a, b, c){
alert(arguments.length); // result: "2"
a = 100;
alert(arguments[0]); // result: "100"
arguments[0] = "qqyumidi";
alert(a); // result: "qqyumidi"
alert(c); // result: "undefined"
c = 2012;
alert(arguments[2]); // result: "undefined"
}
f(1, 2);
arguments.callee
arguments对象中有一个非常有用的属性:callee。arguments.callee返回此arguments对象所在的当前函数引用。
我们知道, 递归函数必须能够引用它本身。很典型的,函数通过自己的名字调用自己。
然而,匿名函数 (通过 函数表达式 或者 函数构造器 创建) 没有名称。
因此如果没有可访问的变量指向该函数,唯一能引用它的方式就是通过 arguments.callee。
function create() {
return function(n) {
if (n <= 1)
return 1;
return n * arguments.callee(n - 1);
};
}
var result = create()(5); // returns 120 (5 * 4 * 3 * 2 * 1)
对于有名字的函数, 在使用函数递归调用时也推荐使用arguments.callee代替函数名本身。
注意:arguments.callee被从 ES5 严格模式中移除掉了!
本文均为荣益互联摘自权威资料,书籍,文章,或来自网络,如有版权纠纷或违规问题,请联系我们删除。我们欢迎您的分享,谢绝直接抄袭复制。感谢…