# 函数的概念

函数:就是封装了一段可被重复调用执行的代码块 通过次代码块可以实现大量代码的重复使用

<script>
    // 1-100的累加和
    var num =0;
    for(var i =1; i<=100; i++){
        num += i;
    }
    console.log(num);

    // 函数就是封装了一段可以被重复执行调用的代码块 目的是让大量代码重复使用

    // 封装函数
    function getSum(num1 ,num2){
        var num =0;
        for(var i =num1; i<=num2; i++){
            num += i;
        }
        console.log(num);
    }

    // 调用函数
    getSum(1,100);
    getSum(1,50);
   
</script>

# 函数的使用

# 1 声明函数

//声明函数
function  函数名(){
  //函数体代码
}

function 是声明函数关键字 必须小写
由于函数一般是为了实现某个功能才定义的,所有通常我们将函数名 命为动词  比如getSum

# 2调用函数

//调用函数
函数名()//通过调用函数名来执行函数体代码

调用的时候千万不要忘了添加小括号
口诀 函数不调用自己不执行

注意: 声明函数本省并不会执行代码 只有调用函数时 才会执行函数体代码

# 3函数的封装

  • 函数的封装就是把一个或者多个功能 通过函数的方式封装起来 对外只提供一个简单的函数结构
    <script>
        // 函数使用分为2步骤  声明函数和调用函数

        // 1 声明函数

        function sayHi(){
            console.log('hi');
        }

        //1 function 声明函数关键字
        // 2 函数是做某些事情 函数名一般是动词  sayHi
        // 3函数不调用 自己不执行

        // 2 调用函数
        sayHi();
    </script>

# 函数的参数

声明函数时,可以在函数名称后面的小括号中添加一些参数,这些参数被称为形参,而在调用该函数时,同时也需要传递相应的采纳数, 这些参数被称为实参

参数 说明
形参 形式上的参数 函数定义的时候 传递的参数 党史并不知道是什么
实参 实际上的参数 函数调用的时候传递的参数 实参是传递给形参的

参数的作用: 在函数内部某些值不能固定, 我们可以通过参数值在调用函数时传递不同的值进去

# 函数形参和实参个数不匹配问题

参数个数 说明
实参个数等于形参个数 输出正确结果
实参个数多于形参个数 支取到形参的个数
实参个数小于形参个数 多的形参定义为undefined 结果为NaN

注意:在JavaScript 中 形参的默认值是Undefined

# 小结

  • 函数可以带参数也可以不带参数
  • 声明函数的时候,函数名括号里面的是形参,形象的默认值为undefined
  • 调用函数的时候,函数名括号里面的是实参
  • 多个参数中间用逗号分隔
  • 形参的个数可以和实参个数不匹配 但是结果不看预计,我们尽量要匹配

# 函数的返回值

return语句

    <script>
        // 函数时做某些事 或者实现某种功能
        function cook(aru){
            console.log(aru);
        }
        cook('yes');

        // 函数返回值
        function cook2(food){
            return 'six';
        }
        console.log(cook2());


               // 函数返回值
        function cook3(food){
            return food;
        }
        console.log(cook3('hello'));

        // 案例1 求两个数的最大值
        function max(num1,num2){
           
        //     if(num1>num2){
        //         return num1;
        //     }else{
        //         return  num2;
        //     }
             
        // }
          return  num1>num2? num1:num2;
        }

    console.log(max(10,20));
    console.log(max(100,20));

    // 案例2  利用函数求任意一个数组中的最大值

    function arrMax(arr){  //arr接收一个数组
        //在我们实际开发里面 我们经常用一个变量来接收 函数返回结果使用更简单
        var max = arr[0];
        for(var i =1; i<=arr.length; i++){
            if(max <arr[i]){
                max = arr[i];
            }
        }
        return max;
    }

    var ar = arrMax([1,4,5,6,7,70]);
    console.log(ar);


    </script>

# 函数返回值注意事项

  1. return语句之后的代码不被执行
  2. return 只能返回一个值

# 函数的返回值

函数没有return 返回 undefined

  1. 如果return 则返回return 后面的值
  2. 如果没有return则返回undefined
  3.         // 我们函数如果有return 则返回的是return 后面的值 如果没有 return 则返回undefined
            function ar(){
                return 900;
            }
            console.log(ar());
            //没有写返回值  返回undefined
    
            function arr2(){
                return ;
            }
            console.log(arr2());
    

# break continue return 的区别

  • break: 结束当前的循环体(如for while)
  • continue: 跳出本次循环, 继续执行下次循环(如for while)
  • return: 不仅可以退出循环, 还能够樊慧芳return语句中的值, 同时还可以结束当前的函数体内的代码

# arguments的使用

    <script>
        // arguments 使用  只有函数才有arguments 对象 而且是每个函数都内置好了这个arguments
        function getNum(){
            // console.log(arguments); //里面存储所有传递过来的实参
            // console.log(arguments.length);
            // console.log(arguments[2]);

            // 遍历arguments 
            for(var i = 0; i<arguments.length ; i++){
                console.log(arguments[i]);
            }
        }
       getNum(1,34,5,6,7)

        // 伪数组  并不是真正意思上的数组
        // 1 具有 数组length 属性
        // 2 按照索引方式进行存储
        // 3 他没有真正数组的一些方法 pop()  push() 等等

    </script>

# 函数案例

# 数组翻转

    <script>
        // 利用函数对数组进行翻转

        function arrfz(arr){
            var newarr = [];
            for(var i = arr.length -1; i>=0; i--){               
                newarr[newarr.length] = arr[i];
            }
            return newarr
        }

        var ls = arrfz([1,35,43,6545,76,5,76,78,6]);
        console.log(ls);
        var l = arrfz(['gfs','fsgfs','rtwrtw','trsefdtws']);
        console.log(l);
    </script>

# 函数可以调用另外一个函数

因为每个函数都是独立的代码块 用于完成特殊任务,因此经常会用到 函数相互调用的情况

    <script>
        // 函数是可以相互调用的
        function fn1(){
            console.log(223);
            fn2();  //在fn1 中调用 fn2
        }
        fn1();

        function fn2(){
            console.log(3545);
        }
    </script>

# 函数的两种声明方式

    <script>
        // 函数的两种声明方式
            // 1 利用函数关键字自定义函数(命名函数)
            function fn(){

            }
            fn();

                // 2 函数表达式 (匿名函数)
                    // var 变量名 = function(){}
            var fun2 = function(name){
                console.log('hello');
                console.log(name);
            }
            fun2('world');

            // 1 fun 是变量名 不是函数名
            // 2 函数表达式声明方式 跟声明变量差不多 只不过变量里存的是值 而 函数表达式里面存档是函数
            // 3 函数表达式也可以进行传递参数
    </script>
更新时间: 31 分钟