其实,每个函数内部都有一个内建的arguments数组,它能返回函数所接受的所有参数。
例:
function mutiplyByTwo() { var i, ar = []; for(i = 0;i<3;i++) { ar[i] = arguments[i]*2; } return ar; } >> mutiplyByTwo(1,2,3); =>[2,4,6]
其实上面的例子看似arguments像是一个数组,其实它实际上是一个类似数组的对象。
而arguments还有一个值得关注的属性——callee属性。它引用的是当前被调用的函数对象。也就是说我们所建函数的返回值是 arguments.callee,那么这个函数在被调用时就会返回自身的引用。
>> function f() {return arguments.callee;} >> f() f()
此外,我们还可以通过arguments.callee属性来实现匿名函数的递归调用;
例如:
( function (count) { if (count < 5) { alert (count); arguments.callee(++count); } } )(1)
上例alert窗口会弹出四次,分别是1、2、3、4.