javascript函数的参数:形参,实参

      //function 参数
            
            //形参列表
            function test(a,b,c,d){    
                //alert(test.length);        //形参个数,4个
                
                //函数的实际参数,内部就是用一个数组去接收函数的实际参数
                //arguments 对象,可以访问函数的实际参数
        //arguments 对象只能在函数的内部使用
alert(arguments.length); //2个 alert(arguments[0]); //10 alert(arguments[1]); //20 return a+b; } alert(test(10,20)); //30,函数的形参和实际参数不一致不会报错。

但是这样写程序不严谨,我们希望的是只有形参和实参个数一致 的时候才去执行函数,否则抛出异常或者给一个提示

所以加上判断:

if(test.length == arguments.length){
       return a+b;
  }else{
       return '参数不正确!';
}

还有问题,test.length虽然能够取到形参的个数,但是一般不这么用,会有潜在性的问题。一般用arguments.callee例子:

      //递归
            function fact(num){
                if(num<=1) return 1;
                else 
                return num*fact(num-1);    
            }
            var F = fact ;    //你把fact 赋值给了变量 F,相当于复制了一份
            fact = null;    //假设有其他人把 fact 弄成了null,
            alert(F(5));    //报错

但是用arguments.callee来代替fact这样写就不会报错了:

      //递归
            function fact(num){
                if(num<=1) return 1;
                else 
                return num*arguments.callee(num-1);    //使用arguments.callee,指向函数本身
            }
            var F = fact ;    //你把fact 赋值给了变量 F,相当于复制了一份
            fact = null;    //假设有其他人把 fact 弄成了null
            alert(F(5));    

所以上边的用取形参也不用test.length,也使用arguments.callee.length:

if(arguments.callee.length == arguments.length){
         return a+b;
 }else{
        return '参数不正确!';
 }

 总结:

 

欢迎关注个人公众号一起交流学习: