JavaScript (06) 基础

119 阅读3分钟

JavaScript (06) 基础

函数

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

函数的使用

  • 函数的声明语法
  • 函数命名规范
    1. 和变量命名基本一致
    2. 尽量小驼峰式命名法
    3. 前缀应该为动词
 <script>
     //function  函数名(){
     //   函数体
    // }
     
     //函数的声明
        function getHllo(){
            console.log('你好');
            console.log('你真好');
            console.log('你真真好');
        }
     //函数调用
     // 函数一次声明可以多次调用 ,每一次函数调用函数体里面的代码会重新执行一次
        getHllo()
        getHllo()
        getHllo()
    </script>

函数案例

  1. 把99乘法表封装到函数里面 ,重复调用3次
<script>
    function getNum(){
		for (let index = 0; index < 9;index++){
            for(let index1 = 1;index1 < index ; index++){
                document.write(`${index1} x ${index} = ${index1 * index}`)
                }
            document.write(`<br/>`)
        }
        }
      getNum()
      getNum()
      getNum()
</script>

函数传参

  1. 函数完成功能需要调用者传入数据 ,那么就需要用参数的函数
  2. 这样可以极大提高函数的灵活性
 <script>
        //函数声明
        //函数声明时,小括号里面的是形参 ,形式上的参数
        
        function getNum(num1,num2) {
            document.write(num1 + num2)
        }
        //函数调用时 ,小括号里面的是实参  ,实际的参数
        // 参数之间要用逗号隔开
        getNum(300,500)
    </script>

形参和实参

  1. 形参 :声明函数时写在函数名右边小括号里的叫形参
  2. 实参 :调用函数时写在函数名右边小括号里的叫实参
  3. 形参可以理解为是在这个函数内声明的变量(比如 num1=10)实参可以理解为是给这个变量赋值
  4. 开发中 尽量保持形参和实参个数一致

1648785335745.png

案例

计算总分案例

  1. 需求:学生的分数是一个数组,计算每个学生的总分

    ①: 封装一个求和函数

    ②: 传递过去的参数是一个数组

    ③: 函数内部遍历数组求和

   <script>
        let arr1 = [99,100,60,85,98,65,66]
        let arr2 = [45,65,44,88,55,254,66]
        function getNnm(arr){
          let num = arr[0]
          for (let index = 0; index < arr.length; index++) {
            
            num +=arr[index]
          }
          console.log(num);
        }
        getNnm(arr1)
        getNnm(arr2)
    </script>

2.找到数组里面的奇数求和

  <script>


let arr1=[4,52,63,5,5,5,455,5456,45,54,]
        let  arr2 = 0
        function getNum(arr) {
          for (let index = 0; index < arr.length; index++) {
            
            if (arr[index]%2 !==0) {
              arr2 +=arr1[index]
            }
          }
          console.log(arr2);
        }
        getNum(arr1)
    </script>

函数的返回值

  • 用return 返回数据

    1. 当函数需要返回数据出去时 ,用return关键字

    2. 语法

1648787080059.png

    <script>
      // 函数 参数的最大值
      function getMax(n1, n2) {
        if (n1 > n2) {
          return n1;
        } else {
          return n2;
        }
      }

      // 通过 console.log 帮我打印
      // let num1 = getMax(1, 3);
      // console.log(num1);
      // let num1 = getMax(1, 3);
      console.log(getMax(1, 3));

      // 通过 document.write  帮我打印
      // let num2 = getMax(2, 4);
      document.write(getMax(2, 4));

      // 通过 alert 帮我打印
      // let num3 = getMax(6, 8);
      alert(getMax(6, 8));
    </script>
  • 不能同时执行多次return 第一个return生效
  • 函数内部 如果写了return ,那么它下面的代码就不会执行
  • 如果一个函数 没有写return 相当于 写了 return undefined

案例

  • 声明一个函数 用来计算 数组的最大值 并且 最大值 返回
<script>         

let arr1 =[12,55,454,21,5456,12132,26]
          let max = arr1[0]
          function getNum(arr) {
            
         
          for (let index = 0; index < arr.length; index++) {
              if (arr[index] > max) {
                  max =arr[index]
              }
            
          }

          console.log(max);
        }
        getNum(arr1)

    </script>

作用域

  • 作用域概述

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

    1. 作用于所有代码执行的环境(整个 script 标签内部)或者一个独立的 js文件
  • 局部作用域

    1. 作用于函数内的代码环境,就是局部作用域。因为跟函数有关系,所以也称为函数作用域。
  • 块级作用域

    1. 块作用域由{} 包括 , if 语句 和 for 语句里面的 {} 等
<script>
      // script标签内的运行环境就是全局作用域
      let num = 100; // 全局作用域

      function getMax() {
        // 这个区域内就不属于全局作用域
        // 局部作用域 或者 也叫做 函数作用域
        let num2 = 200;
      }

      for (let index = 0; index < 4; index++) {
        // 块级作用域
      }

      while (true) {
        // 块级作用域
      }
      if (true) {
        // 块级作用域
      }
    </script>
  • 全局变量
    1. 全局变量在变量定义之后区域 可以访问和修改
    2. 函数外部的let的变量
 <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>
  • 局部变量
    1. 函数内部let 变量
    2. 局部变量只能在当前函数内部反问和修改
 <script>
      // 局部变量
      // 如果是在函数内部定义的变量 就叫做局部变量
      // 局部变量 不能在 它的大括号之外使用的,否则就会报错!! 
      
      let msg = 10000; // 全局变量

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


      // 局部变量 不能在 超出它的大括号来使用
      console.log(num); // 会报错 
    </script>
  • 块级变量
    1. {} 内部的let变量
    2. let定义的变量 ,只能在块作用域里访问 ,不能跨块访问,也不能跨函数访问
<script>
      // 块级变量 就是我们在块级作用域内 定义的变量
      // 块级变量 类似局部变量,也是超出了自身的大括号 不能使用

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


       {
         let num =10;
      }
       {
        console.log(num);
       }


    </script>
小结
  1. 全局变量
    • 直接放在 script 标签内的变量
  2. 局部变量 用大括号包起来的变量
    • 函数内部变量
    • 块级变量

匿名函数

  • 函数按照有没有名字 分两种
    1. 有名字 具名函数
    2. 没有名字 匿名函数
    <script>
      // 具名函数  函数名称  func1
      // function func1() {
      // }

      // 匿名函数  = function () {}; 匿名函数 了解即可 

      //    let func2 = function () {};  叫做 函数表达式 
      // 表达式 可以表示结果的一段代码  函数表达式  了解 
      let func2 = function () {
        console.log("123");
      };


      // 调用
      func2();
    </script>
  • 自执行函数
    1. 自执行函数 = 匿名函数一起出现 通用的功能是 防止变量污染
    2. 函数在定义的同时 就直接执行了
<script>
      /* 
      用在哪里呢  
      适合做一次性的任务- 不希望这个函数可以得到复用!!! 
        函数包装多段代码  让程序比较简洁

      1 页面打开时候
        1 设置 页面的标题 =  月薪过万
        2 设置 页面的背景颜色 =  黄色 
      
       */

      // 匿名函数
      // function () {
      //   // 设置 页面的标题 =  月薪过万
      //   document.title = '月薪过万';
      //   // 设置 页面的背景颜色 =  黄色
      //   document.body.style.backgroundColor = 'yellow';
      // }

      // let msg = 123;
      // // 自执行函数
      // (function () {
      //   let msg = 123;
      //   // 设置 页面的标题 =  月薪过万
      //   document.title = '月薪过万';
      //   // 设置 页面的背景颜色 =  黄色
      //   document.body.style.backgroundColor = 'yellow';
      // })();

      // console.log(msg);
    </script>