分享Js小基础(5)

116 阅读3分钟

函数

1.函数:

function,是被设计为执行特定任务的代码块

2.说明:

函数可以把具有相同或相似逻辑的代码“包裹”起来,通过函数调用执行这些被“包裹”的代码逻辑,这么做的优势是有利于精简代码方便复用。

一.函数的使用:
<script>
    //    1.函数的声明
       function sayHi() {
           console.log('嗨')
       }
    //    2.函数调用
         sayHi();
   </script>
1.函数名命名规范:

①.和变量命名基本一致 ②.尽量小驼峰式命名法 ③.前缀应该为动词 ④.命名建议:常用动词约定

 <script>
    function userName() {
      
    }
  </script>
2.函数封装

函数的调用语法

  <script>
    // 函数调用,这些函数体内的代码逻辑会被执行
    userName() 
    // !!声明(定义)的函数必须调用才会真正被执行,使用(调用函数)
    // 例:
    //函数一次声明可以多次使用,每一次函数调用函数体里面的代码会重新执行一次
    userName()
    userName()
    // 类似于alert() , parseInt() 这种名字后面跟小括号的本质都是函数的调用 

  </script>

函数体是函数的构成部分,它负责将相同或相似代码“包裹”起来,直到函数调用时函数体内的代码才会被执行。函数的功能代码都要写在函数体当中。

1648791927014.png

二.函数传参:
1.传参的作用:

这样的函数只能求 10 + 20, 这个函数功能局限非常大

1648793127358.png

解决办法:把要计算的数字传到函数内

 <script>
       function sum(num1,num2) {
           console.log(num1+num2)
       }
       sum(10,20)
   </script>
2.有参数的函数声明和调用

声明;

1648794016069.png

调用:

1648794111104.png

3.形参和实参
 <script>
    //    name1和name2是形参,是形式上的参数
       function name(name1,name2) {
           document.write(name1,name2)
       }
       name('谢霆锋','吴彦祖')
    //    谢霆锋和吴彦祖是实参,实际参数
   </script>

①形参:声明函数时写在函数名右边小括号里的叫形参(形式上的参数) ②实参:调用函数时写在函数名右边小括号里的叫实参(实际上的参数) ③形参可以理解为是在这个函数内声明的变量(比如 num1 = 10)④实参可以理解为是给这个变量赋值 ⑤开发中尽量保持形参和实参个数一致 ⑥我们曾经使用过的 alert('打印'), parseInt('11'), Number('11') 本质上都是函数调用的传参

4.函数封装求和

形参如果不被赋值,就是undefined

1648799852523.png

    <script>
      // 声明函数
      function getSum(num1, num2) {
        // num1 = 100
        // num2 = undefined
        console.log(num2);
        document.write(num1 + num2);
        // 100 + undefined
      }
      getSum(10);
    </script>
三.函数的返回值:

函数是被设计为执行特定任务的代码块,执行玩特定任务后把结果给我们。 比如:

这个num 就是  函数getSum调用的返回值 

  let num = getSum();
 <script>

      function getMax() {
        // 100 就是 函数在执行完毕的时候 会返回的数据
        return 100;
      }

      let num1 = getMax(); // num1 =100

      console.log(num1);
    </script>

函数返会值的使用场景:

  <script>
        function getMax(n1,n2) {
          if(n1>n2) {
            // 返回n1
            return n1
          }else {
            // 返回n2
            return n2
          }
        }
        // 可以在函数外选择输出方式
        
        //getMax(10,20)
        // 方式1
        // let num1=getMax(10,20)
        // console.log(num1);
      
        // 方式2 简洁
        console.log(getMax(10,20))
      
        // getMax(4,8)
        document.write(getMax(4,8))
      
        // getMax(5,9)
        alert(getMax(5,9))
    </script> 
小结:

1.不能同时执行多次return,第一个return生效 2.函数内部,写了return,下面的代码就不会执行了 3.如果函数没有写return,就相当于函数写了return undefind

四.作用域

通常来说,一段程序代码中所用到的名字并不总是有效和可用的,而限定这个名字的可用性的代码范围就是这个名字的作用域。作用域的使用提高了程序逻辑的局部性,增强了程序的可靠性,减少了名字冲突。 !

1648806479268.png

全局变量演示
    <script>
      // 直接写在全局作用域下的变量 =  全局变量  在任意的地方来访问

      let num = 100; // 全局变量   在任何地方都可以访问 

      function getMax() {
        console.log('函数 访问全局变量', num);
      }

      getMax();

      for (let index = 0; index < 2; index++) {
        console.log('for循环内 块级作用域 访问全局变量', num);
      }

      if(true){
        console.log("if语句 也 可以访问全局变量",num);
      }
    </script>
局部变量演示:
 <script>
      // 局部变量
      // 如果是在函数内部定义的变量 就叫做局部变量a
      // 局部变量 不能在 它的大括号之外使用的,否则就会报错!! 
      
      let msg = 10000; // 全局变量

      // 局部变量  函数内部 声明的变量
      function getMax() {
        // 声明一个数字
        let num = 200; // 局部变量
      }


      // 局部变量 不能在 超出它的大括号来使用
      console.log(num); // 会报错 
    </script>
块级变量
<script>
      // 块级变量 就是我们在块级作用域内 定义的变量
      // 块级变量 类似局部变量,也是超出了自身的大括号 不能使用

      for (let index = 0; index < 2; index++) {
         // num 块级变量 
        let num = 100;
      }
       console.log(num);// 使用块级变量  出错!! 
  
    </script>
变量的使用情况
    <script> 
      let num = 100;

      function getMax() {
        // let num =200;

        console.log(num); //  200   就近原则  寻找变量的时候 优先找自己的作用域 自己没有再往外找
      }

      getMax();

    </script>
作用域链:是代码寻找变量的一种机制,或者规定(就近原则)

1.先找自己的作用域(没有的话) 2.再往外部(父级)的作用域来找(没有的话) 3.继续往外部(父级)来找 4.直到找到全局作用域

五、函数嵌套
<script>
      function func1() {
        console.log('func1');

        func2();
      }

      function func2() {
        console.log('func2');
        func3();
      }

      function func3() {
        console.log('func3');
      }

      func1(); //输出 func1
    </script>

1648821100794.png

六、匿名函数 (后期会详细讲)

函数可以分为: 1.具名函数 声明:function fn() {} ==>(有名字) 调用:fn() 2.匿名函数 function() {} ==>(没名字)

函数表达式 letfun2=function(){}

自执行函数 作用:防变量污染 特点:在定义函数的同事也执行函数 代码:(匿名函数){}

补充:提醒自己直接套

 <script>
    // 1.声明数组arr
   let arr=[1,2,3,4,]
  	// 3.接收到函数arr的值
    function numMax(arr) {
    }
    // 2.接受到数组arr,然后传给,函数
    // 可以省略第一步,直接在[]写1,2,3,4即可
    numMax([arr])
  </script>