arguments是javascript的一个内置对象,每个函数都有属于自己的一个arguments对象,它包含了函数所要调用的参数。
function fn(){
console.log(arguments);
}
fn(10,20);
arguments是个类似数组但不是数组的对象,说他类似数组是因为其具备数组相同的访问性质及方式,能够由arguments[n]来访问对应的单个参数的值,并拥有数组长度属性length。
function fn(){
console.log(arguments.length);
console.log(arguments[1]);
}
fn(10,20);// ->结果为2,20
把arguments对象转换成一个真正的数组,可以使用数组中slice方法,从而求平均值
function avg(){
var arg = Array.prototype.slice.call(arguments);
return eval(arg.join("+"))/arg.length;
}
var result = avg(1,2,3,4,5);
console.log(result);// -> 结果为3
其中变量arg就是一个含有函数所有参数的标准javascript数组对象。
arguments对象存储的是实际传递给函数的参数,而不局限于函数声明所定义的参数列表。
function fn(x,y){
console.log(arguments.length);
}
fn(1,2,3);// -> 结果为3
修改参数值:x和arguments[0]都对传递的参数1进行引用,改变其中一个值,即改变了二者所有的值
function fn(x,y){
x = 4;
//arguments[0] = 4;
console.log(arguments[0]);
}
fn(1,2,3); // -> 结果为4
argumens.callee是一个指向正在运行函数的指针,在严格模式下不兼容
function factorial(num){
if(num <= 1){
return 1;
}else{
return num * arguments.callee(num-1);
}
}
console.log(factorial(5));// -> 120
JavaScript中函数是不能重载的,但argumens是可以模拟函数重载
function fn(){
if(arguments.length == 1){
console.log(arguments[0] + 10)
}
if(arguments.length == 2){
console.log(arguments[0] + arguments[1])
}
}
fn(10); // -> 20
fn(10,30); // -> 40
前端入坑深似海,自此妹纸是浮云。大家好,我是木雷,喜欢我就关注我吧。
开怀一笑:
突然不想干程序员了怎么办?
拔出来。