JS之函数(一)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/hudie_1993/article/details/82798107

函数定义

    函数主要分为两种,其一为常见的函数声明,其二为函数表达式

1、函数声明

   function test() {}

讲解为:函数的特征值 function + 函数名() {函数体}

2、函数表达式

(1) 命名函数表达式

              var test = function test(){}

(2) 匿名函数表达式

              var test = function (){}

3、函数中的参数传递

(1) 实参

       实参即为实际参数,表示当调用函数时,而传递的参数

(2) 形参

      形参即为形式参数,表示当定义函数时,所赋予的参数变量形式

(3)案例

         A、案例1
                     

function test(a,b){

                           var res = a + b;

                           console.log(res);

                           console.log(a);

                           console.log(b);

                    }

                     test(1,2);

      该案例为简单的函数类型,调用中传入的实参为1,2,函数test中a,b代表的是形式参数,形式参数在其函数体中是被隐含着定义,实际上存在一条语句为var a,b;

      如果调用函数为test(1),表明a=1,b由于没有初始化,因此为undefine,所以最后的res是NAN的形式。

    B、案例2
            

                  function test(a,b){

                      if(test.length > arguments.length){

                               console.log("形参多了");

                       }else if(test.length < arguments.length){

                               console.log("实参多了");

                       }else{

                                console.log("相等");

                       }

                     }

                 test(1,2);

    在JS的函数中,存在arguments数组,该数组用于将所有的实参存放于一起。且该数组中的值只与实参有关,同形参的多少没有关系。

     函数的大小,test.length表示的是形参的个数

     例如function test(a,b,c,d,r){}, 则该函数的大小为5-->test.length=5

      实参的大小表示为arguments.length

 C、案例3

     如果存在一种情况,需要计算所有参数之和,即无论调用函数中传递多少个值,均需要计算出结果;

      分析:这种情况属于不定性,因此无法根据传递的实参来定义形参的个数,所以考虑用argument数组来进行计算求和。

                     function test(a,b){

                           var res=0;

                           for(var i=0;i<arguments.length;i++){

                                res +=arguments[i];

                                console.log(arguments[i]);

                            }

                          console.log("任意数之和:"+res);

                     }

                   test(1,2,1,1,..);

4、arguments指向
       

            function test(a,b){

                        //隐含语句:var a,b;

                       //隐含语句:arguments = [1,2];

                       a = 3;

                    console.log(arguments[0]); ---->打印值为3

                    //反之,如果将arguments[0]=2,

                    arguments[0]=2;

                     console.log(a);

               }

           test(1,2);

        在该例子中,我们已知晓arguments代表的是将所有的实参接收并存放到数组中,如果将a的值重新修改,则argument中的值也会随之发生改变。实际上形参和arguments之间是两个对象,只是这两者之间存在一定的关系,即形参会随着arguments中值的变化而变化,反之同样如此。

5、练习

      (1) 输入数字,逆转并输出汉字形式

   

          function reverse(){

                 var num = window.prompt("请输入数字:");

                 var stringData = "";

                 if(num){

                     for(var i=num.length-1;i>=0 ;i--){

                          stringData +=changeChinese(num[i]);

                        }

                     console.log(stringData);

                 }else{

                   alert("请输入参数:");

                 }
             }


            function changeChinese(num){

                  switch(num){

                      case '1':

                          return '壹';

                      case '2':

                          return '贰';

                      case '3':

                          return '叁';

                      case '4':

                          return '肆';

                      case '5':

                          return '伍';

                     }

               }

               reverse();

 (2) 实现N的阶乘

        //阶乘计算:例如计算3的阶乘 3x2x1=6 

        // n! = n * (n-1)!         0! = 1;
 

              function countN(n){

                     if(n == 1 || n == 0){

                            return 1;

                       }

                return n * countN(n-1);

              }

              console.log(countN(5));

猜你喜欢

转载自blog.csdn.net/hudie_1993/article/details/82798107