【Day5】ES5(函数02,arguments,递归)

日期:2月4日


1.函数的类型

        声明式

                function funName() {

                                }

                可以在页面任意位置上调用

        表达式

                var funName = function() {

                        }

                函数只能在表达式的后面调用

        函数的其他特点:

               1.函数的名字不能重复 如果函数名重复 后面的会把前面的覆盖掉

               2. js 没有重载的概念 

               3. 实参和形参的对应关系

                   形参的个数=实参的个数 一一对应

                   实参个数 < 形参个数 没有匹配到的形参就是undefined

                   实参个数 > 形参个数   没有匹配的实参 没办法在函数中使用的

               4. 函数之间可以相互调用

        函数的重载:

               同一页面 函数名相同 但是 参数列表不同

2.arguments:

            1. 任意一个函数中都有 arguments 属性

            2. arguments 是一个伪数组  保存函数的[实参]

       arguments是 伪数组:具有数组的结构  但是并不是数组的类型,遍历的方式和数组的遍历方式 一样

案例:

            for(var index in arguments) {
                console.log(index,arguments[index]);
            }

             for(var i = 0;i<arguments.length;i++) {
                console.log(i,arguments[i]);
            }

  案例:

        /**
         *  获取任意数的和
         */
        function sum() {
            var sum = 0;
            for(var index in arguments) {
               sum += arguments[index];
            }
            return sum;            
        }

    console.log( sum(1,2,3));
    console.log( sum(1,2,3,4,5,6));

           

  案例:

/*
    获取任意数的最大值
   */
   function arrMax() {
         
         var max;

         if(arguments.length) {
             max = arguments[0]
             for(var i = 1;i<arguments.length;i++) {
                 if(arguments[i] > max) {
                     max = arguments[i]
                 }

             }
         }

         return max;

      }
      console.log(arrMax(10,30,20));
      console.log(arrMax(50,30,20));
      console.log(arrMax(50,30,100));

3.递归

       1. 递归: 函数自己调用自己

       2.使用递归:一定要有出口  没有出口 递归就陷入一个死循环

       3.递归使用的场景:  同一个业务逻辑需要反复执行

       4. 递归的特点: 执行效率比较慢  有替代递归的方法 不推荐使用递归

                   递归函数的分析:  从前向后分析   假定一个函数时干什么 再找寻其出口

                   递归函数的执行: 从后向前执行   先执行出口函数  再一步一步向上赋值

        // 打印需求
        function fn(n) {
            if(n === 101) {
                return;
            }
         
            console.log(n);
            n++;

            fn(n)

        }


// 累加需求  1+2+3....n  业务逻辑 当前的值+ 之前的和

        function add(n) {
            if(n === 1) {
                return 1;
            }

            return  n + add(n-1);

        }

        console.log(add(100));

        // 求 1+ 2+3+4+5
        /*
         执行过程: 
           result  5 + fn(4) 10
           fn(4)   4 + fn(3) 6
           fn(3)   3 + fn(2) 3
           fn(2)   2 + fn(1) 1
           fn(1)   1
        
        
        */
        console.log(add(5));

案例:(斐波那契)

/*
         求第n个数的斐波那契的值 

         fn(n)  =  fn(n-1) + fn(n-2)
        */

        function feibo(n) {
            if(n === 1 || n === 2) {
                return 1;
            }

            return feibo(n-1) + feibo(n-2)
        }

        console.log(feibo(2));
        console.log(feibo(4));
        console.log(feibo(5));

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值