函数部分

191 阅读4分钟

//这段就是为了自己学习和复习时看的,各位大佬看到后不要笑话0 0

函数概念:封装了一段可能重复使用的代码块 目的:就是为了重复使用相同的代码

函数的声明方式

使用:声明函数function 函数名(){中间是函数体;}

function是声明函数的关键字必须小写

调用:函数名() 口诀:函数本身不会执行,调用后才会执行;

使用:函数表达式(匿名函数)

var num1 = function() { console.log('我是函数表达式'); }

num1();

小细节:

1.num1不是函数名,是变量名

2.和声明变量差不多,只不过变量里存的是值,但是函数表达式里存的是函数

3.也可以进行参数传递


课程案例:

// 利用函数声明1-100的和

        
        function num() {
            var sum = 0`;`
            for(i=1;i<=100;i++) {
                sum+=i;
            }<br>
            console.log(sum);
        }
        num();
       

带参数实现函数重复实现不同代码

函数可以不带参数,也可以参数不限个,参数与参数之间用逗号隔开

function num(形参1,形参2....){函数体}

num(实参1,实参2....)

在函数声明()中的是形参,实参是写在调用函数();

重点:形参是用来接受实参的 我个人理解就是在调用函数时读到了实参内容后,传递到函数的形参上,形参类似于一个不声明的变量,接受到后就是形参=实参

课程案例:

       //利用函数求任意两个数的和
        function num(num1,num2) {
         console.log(num1+num2);
        }
        num(1,100);<br>
        //利用函数求任意两个数之间的和
        function num(num1,num2) {
            var sum = 0;
            for(i=num1;i<=num2;i++) {
                 sum+=i;
            }<br>
            console.log(sum);
        }<br>
        num(1,100);

形参个数和实参个数匹配问题

情况1:形参实参个数都匹配,正常输出

情况2:如实参个数多于形参,会取到形参的个数(我觉得正常人应该不会干这事)

情况3:如实参个数少于形参,按照形参看做不声明的变量的结果,多出的形参没有接受到赋值,就会等于undefined 最后返回NaN 一定要记住一个变量如果没赋值就是会等于undefined


函数的返回值 return语句

function 函数名() { return 要返回的结果; } 函数名();
只要函数遇到了return 就把后面的结果赋值给了函数名(); 函数名() = return 后面的结果

    // 课程案例:
    //function num(aru) {
        //return aru;
   // }
     错误:只写函数调用num(),那都告诉你了num() = aru,你这么写什么都不会输出
     正确:console.log(num('学习'));
     
     
         // 利用函数求一个任意数组中最大值
         
         

        function num(arr) { //因为实参传递过来的是一个数组,所以arr = 一个数组
          var max = arr[0];
          for(i=1;i<arr.length;i++) {
              if(max<arr[i]) {
                  max = arr[i]
              }
          }
          return max;
        }
        // 小细节:在实际开发中,经常用一个变量来接受函数返回的结果 使用更简单
        var re = num([1,3,5,7]);
        console.log(re);

return 终止函数

例子:function num () {

return 666;

return 777;

//777不会被返回哦,写了return,下面得代码就不会再执行了,return也只返回一个值

}

// 拓展小知识:求任意两个数得加减乘除

        // 因为return只能返回一个值,可以利用数组得方式返回,想取中间得值就遍历数组就可以了
        function num(num1,num2) {
            return [num1+num2,num1-num2];
        }
        var re = num(1,3);
        console.log(re);

如果一个函数没有return就会返回undefined

例子:function num() {

}

console.log(num());返回undefined


因为return有终止的作用所以复习一下之前的知识

break,continue,returen的区别:

break:结束当前循环体;

continue:跳过当前循环,继续下次循环(如for,while);

returen:不仅可以退出循环,还可以返回后面的值,同时结束函数体内代码

课后作业:

        1.写一个函数,用户输入任意两个数字进行算数运算并且弹出运算后的结果
        var num1 = prompt('请输入第一个数');
        var num2 = prompt('请输入第二个数');
        var ysf = prompt('您要进行什么运算');
         function num(num1,num2,ysf) {
            if(ysf==='+') {
                 return parseInt(num1)+parseInt(num2);
            }else if(ysf === '*') {
                return parseInt(num1)*parseInt(num2);
            }else if(ysf === '/') {
                return parseInt(num1)/parseInt(num2);
            }else if(ysf === '-') {
                return parseInt(num1)-parseInt(num2);
            }
         }
         var re = num(num1,num2,ysf);
         console.log(re);
         
         
        2.写一个函数,用户任意输入两个数求最大值,并弹出对比后的结果
        var num1= prompt('第一个数:');
        var num2= prompt('第二个数:');
        function num(num1,num2) {
               if(parseInt(num1)>parseInt(num2)) {
                   return num1;
               }else {
                   return num2;
               }
        }
        var re = num(num1,num2);
        alert(re);
        
        
        3.  写一个函数,用户任意输入三个数求最大值,并弹出对比后的结果
        var num1= prompt('第一个数:');
        var num2= prompt('第二个数:');
        var num3= prompt('第三个数:');
        function num(num1,num2,num3) {
            var max =0;
            if(parseInt(num1)>parseInt(num2)) {
                max=num1;
            }else {
                max=num2;
            }
            if(max>parseInt(num3)) {
                return max;
            }else {
                max = num3;
                return max
            }
        }
        // 这边其实用三元运算符做比较好。。但是我有点忘记了,不在家里,就先用这个做了
        var re = num(num1,num2,num3);
        alert(re);

arguments的使用

当我们不确定有多少个参数传递的时候,可以用arguments来获取,在js中,arguments实际上他是当前函数的一个内置对象,所有函数都内置了一个arguments对象,存储了传递过来的所有实参

// arguments的使用 使用场景当你不知道用户会输入几个实参的时候使用 只有函数才有这个方法

        // 具有伪数组的形式
        // 1.具有length属性
        // 2.按照索引的方式储存
        function num() {
        //     console.log(arguments);
        想要取出里面的内容就遍历
            for(i=0;i<arguments.length;i++) {
                  console.log(arguments[i]);
            }
        }
        num(1,2,3);

课程案例:

        1.利用函数求任意数的最大值
        function num() {
            var max = arguments[0];
              for(i=1;i<arguments.length;i++) {
                  if(max<arguments[i]) {
                         max = arguments[i];
                  }
              }
              console.log(max);
        }
        num(1,3,5,8);
        2.翻转任意数组
        function num(arr) {
            var newArr = [];
            for(i=arr.length-1;i>=0;i--) {
               newArr[newArr.length] = arr[i];
            }
            return newArr;
        }
        console.log(num([5,4,3,2,1]));
        3.判断闰年
        var num1 = prompt('请输入一个年份:');
        function num(num1) {
              if(num1%4==0&&num1%100!=0||num1%400==0){
                  return  true;
              }else {
                  return   false;
              }
        }
        var re = num(num1);
        console.log(re);

函数之间可以互相调用

我们从代码执行步骤来看,先看到fn1声明函数后本身不执行,往下读取到调用函数fn1(),这时候再进到函数内看,先打印了一个11,又看到了fn2调用,在进到fn2声明函数中打印了22,这就是函数之间相互调用

 function fn1() {
            console.log(11);
            fn2();
        }
        fn1();
        function fn2() {
            console.log(22);
        }
        最后输出得第一行11,第二行22