函数参数的几种类型

抽象环境,不是解决某个实际问题,根据需求解决对应的问题

例如下面例子,可以给函数传入不同的数值和运算符来进行想要的运算

 function fn(a,b,type){
  	 if((a=isNaNNumber(a))===false) return;
     if((b=isNaNNumber(b))===false) return;
     switch(type){
         case "+":
         console.log(a+b);
         break;
         case "-":
         console.log(a-b);
         break;
         case "*":
         console.log(a*b);
         break;
         case "/":
         if(b==0){
             console.error("除数不能为0");
             return;
         }
         console.log(a/b);
         break;
         case "%":
         console.log(a/b);
         break;
         default:
         console.log(type+"类型错误");
     }
 }
  function isNaNNumber(n){
     var s=n;
     n=parseInt(n);
     if(isNaN(n)){
         console.error(s+"不是数值");
         return false;
     }
     return n;
 }

 fn("10",5,"+");

1.参数是变量,只作用于函数内部,外部不可以调用
function fn(a,b){
      a++;
      b++;
      console.log(a+b);
}

 console.log(fn.length);//描述参数的数量

 参数是按照顺序赋值的 3对应的是函数中参数a,5对应的是函数中参数b

 这里填入了实际真实的值   实参
 fn(3,5);  // console.log(a+b);打印为10

 var a1=3;
 var b1=5;
这里填入的是变量,不是实际的值,  形参
 fn(a1,b1); //a1对应的是函数中参数a,5对应的是函数中参数b 
 console.log(a+b);打印为10

 console.log(a1);//打印为3  
 (因为是把a1对应的数值传入了函数里面,而a1未改变)
2.传入参数是对象时

当函数参数是对象时,对对象里面的的属性值进行操作,这样原对象也会发生改变,因为对象是放在堆中的,地址是放在栈中的,他们公用一个地址所以一个如果对象里面的的属性值进行操时,就会改变原对象了,这有就是 console.log(obj1.a,obj1.b);打印的值为什么是2 3了

	function fn(obj){
        obj.a++;
        obj.b++;
        console.log(obj.a+obj.b);//5
    }	

    var obj1={
        a:1,
        b:2
    }
    fn(obj1);
    console.log(obj1.a,obj1.b);// 2  3
 function fn(obj){
     这句之前obj和外面的obj引用地址相同
     obj={a:2,b:3};
     重新将obj的引用地址改变,这时候就与外面的obj没有任何关系了
     console.log(obj.a++obj.b);
  }

 var obj={
      a:1,
      b:2
  }
  fn(obj);

  console.log(obj);

打印结果如图所示
在这里插入图片描述

3.传入参数是函数时

回调函数,将函数作为参数传入到另一个函数中,在需要执行时触发执行该函数
回调函数的目的就是为了让在两个不同的地方,互相不能确定时,进行调用

function fn(f){
   f();
}

function fn1(){
   console.log("aaaa");
}

fn(fn1);
4.传入参数是任意多个参数时
function fn(){
     console.log(arguments);//参数集
     for(var i=0,sum=0;i<arguments.length;i++){
         sum+=arguments[i];
     }
     console.log(sum);
  
 }

fn(3,4,5,6,7);
console.log(fn.length);//0

打印结果如图所示:
在这里插入图片描述

 function fn(){
     //arguments.callee就是当前函数
     console.log(arguments.callee===fn);
     //arguments.callee.name就是当前正在执行的该函数名
     console.log(arguments.callee.caller.arguments);
     //arguments.callee.caller 执行该函数的环境函数,
     //当前函数在那个函数里执行的

 }
 function fn1(){
     fn(1,2,3,4);
 }

 fn1(5,6,7)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值