arguments实参集合与局部变量参数的关系

//function fn1(a,b,c){//形参:形式上abc代表着123 形式主义
function fn1(){
    //this
    //return
    //arguments
    //event
    //fun fn1()括号里即使没有传形参,实参也进来了,进来后都存入到了arguments里面 arguments ==>[1,2,3]-->实参的集合
    alert(arguments);//object Arguments
    alert(arguments.length)//实参的长度
    //可以通过类似于数组下标的形式来找arguments实参集合里面的任何一个 eg:arguments[0]
}
fn1(1,2,3)//实参 实际传递的参数
arguments适用场合:当函数的参数个数无法确定的时候
function sum(){
    var result = 0;
    for(var i=0;i<arguments.length;i++){
        result += arguments[i];
    }
    return result;
}
console.log(sum(1,2,3,4,5,386))
利用arguments.length查看实参和形参的个数是否一致
function checkAdd(a, b) {  
  var realLen = arguments.length;  
  console.log("realLen:", arguments.length);  
  var len = checkAdd.length;  
  console.log("len:", checkAdd.length);  
  if (realLen == len) {  
    console.log('实参和形参个数一致');  
  } else {  
    console.log('实参和形参个数不一致');  
  }  
};  
checkAdd(1,2,3,6,8);  
//realLen: 5
//len: 2
//实参和形参个数不一致
arguments.callee 引用函数自身
借用arguments.callee来让匿名函数实现递归
var sum3 = function(n) {  
    if(n == 1) {  
        return 1;  
    }else {  
        return n + arguments.callee(n-1);  
   }  
}  
console.log("sum =", sum3(5));//15
arguments和局部变量的关系:可以读可以改
var a = 1;
function fn2(a){
    arguments[0] = 3;
    alert(a);//3
    var a = 2;
    alert(arguments[0]);//2
}
fn2(a);
alert(a);//1
arguments模拟函数重载
用 arguments 对象判断传递给函数的参数个数,即可模拟函数重载:
function doAdd() {
  if(arguments.length == 1) {
    alert(arguments[0] + 5);
  } else if(arguments.length == 2) {
    alert(arguments[0] + arguments[1]);
  }
}

doAdd(10);  //输出 "15"
doAdd(40, 20);  //输出 "60"
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值