在javascript中函数调用时,会自动在函数内产生一个arguments的隐藏对象。arguments类似于数组,但又不是数组。可以使用[]操作符获取函数调用时传递的实参。

其类型

function test1(){
console.log(typeof arguments); // object
}
test1();

其属性

length:获取函数内传入实参个数。
适用场景:模拟函数重载。

function test2(a,b){
console.log(arguments.length); // 获取函数内传入实参个数:4
console.log(test2.length); // 可以通过 函数名.length 获取形参个数:2
}
test2(1, 'a', 5, 'gg');

callee:引用当前正在执行的函数。
适用场景:递归。

// 求1到n的自然数之和
function add(n){
if(n == 1) return 1;
else return n + arguments.callee(n-1);
}

转换成真正的数组

Array.prototype.slice.call(arguments)

// 任意数量的一组数字排序
function mySort(a,b,v) {
var tags = new Array();
tags = tags.concat(tags.slice.call(arguments)).sort(function(a, b){
return a - b;
});
return tags;
}
var result = mySort(50,11,16,32,24,99,57,100);
console.log(result); // [11, 16, 24, 32, 50, 57, 99, 100]