新的篇章--函数

108 阅读4分钟

什么函数?

和数学中的函数不一样,可以把函数理解为像div一样的盒子

为什么要有函数, 函数功能是什么

帮我们把项目中多个 地方使用到的功能(代码段), 抽离出来。然后在需要的地方调用函数。

一个完整的函数分为两部分

  1. 定义阶段

  2. 调用阶段

函数的定义

赋值式定义:

    var fn = function () {}
    
    console.log(fn)

声明式定义:

    function fn1() {}
    
    console.log(fn1)

解释:

       function () {}  ---> 匿名函数
           function    关键字, 表明后续紧跟一段代码, 是函数
           ()          内部书写, 参数      后续讲,暂时先记住, 暂时理解为 固定写法 
           {}          内部书写, 函数调用执行时 的代码(可以理解为 要执行的代码)
     
       function fn1() {}   ---> 具名函数
           funtion     关键字, 同上
           fn1         函数名, 将来可以通过 这个名字(变量) 去调用(去找到)本函数
           ()          参数, 同上
           {}          要执行的代码段, 同上

函数的调用:

赋值式定义

    var fn = function () {
        console.log(111)
    }    
     

声明式定义

    function fn1() {
        console.log(222)
    }

不管函数定义是如何定义的, 调用方式永远只有一种

        语法:   函数名()
   

函数声明式和赋值时的区别

函数声明式和赋值式的区别

       1. 书写不同
       2. 打印时, 声明式 会带上函数名, 赋值式没有
       3. 调用时有差异
       声明式: 可以在函数定义前 调用

函数的参数

参数分为两个

形参 函数名后(function) 后边的小括号内部, 每书写一个 就相当于在函数内部声明一个变量, 可以在函数内部去调用。

实参 调用函数时的小括号内部书写的值, 就是实参, 实参与形参为 一一对应的关系 形参与实参会一一对应

如果实参数量少于形参那么前边的形参对应接受值, 没有对应实参的形参值为 undefined。

如果形参数量少于实参那么会一一对应后, 多余的实参无法通过参数获取。 eg:

 function fn(a) {
        console.log(a)
    }
    fn(1)   // 1
    fn(1, 2)   // 1
    fn(2, 3, 4)   // 2

函数的返回值

语法:

    return 需要返回的内容 

函数默认返回值

    我们可以不写 return 函数会默认在代码段最后一行 写上 retrun undefined
      

我需要写返回值吗?我什么时候需要写返回值?

    返回值的书写 取决于 是否需要得到函数内部某一个变量的值, 如果需要可以使用返回值将其返回, 如果不需要我们可以不写
     
      

return

具有中断函数执行的功能

如果不想中断函数, 那么一定要将 return 放在函数的最后

除非就是想要通过 return 中断函数的运行

小例子:

  1. 在 1000 到 2000 的数字内, 需要求出 是 4的倍数, 且不是100的倍数 的那个数字 输出在页面 但是每4个换一行。

      var num = 0 // 计数器, 计算达到 4 次时 需要换行
      for (var i = 1000; i < 2000; i++) {
          if (i % 4 == 0 && i % 100 !== 0) {
              // console.log(i)
              document.write(i + ' ')
              num++
              if (num == 4) {
                  document.write('<br>')
                  num = 0
              }
          }
      }
    
  2. 求质数

        unction fn(a) {
        for (var i = 2; i < a; i++) {   // 写 for 循环的实际目的就是为了得到它自身和1之外的 数
            if (a % i == 0) {
                break   // 直接停止整个循环
            }
        }
        /**
         * 假设 a 为 5
         *      第一轮循环 i == 2   条件 i < a  满足    执行循环代码
         *      第二轮循环 i == 3   条件 i < a 满足     执行循环代码
         *      第三轮循环 i == 4   条件 i < a 满足     执行循环代码
         *      第四轮循环 i == 5   条件 i < a 不满足   结束整个循环
         * 
         * 假设 a 为 8
         *      第一轮循环 i == 2 条件 i < a 满足   执行循环代码
         *              此时恰好满足 a % i == 0 那么 if 判断执行 执行代码 break 结束整个循环
         * 
         *      此时 i 的值 为 2
         *      
        */
    
        // 2. 根据传入的参数决定返回什么值
        if (i == a) {
            // 应该是 质数
            return true
        } else {
            // 这里 不是 质数
            return false
        }
        // count == 0 ? (return true) : (return false)  // 三目 不能书写 return true 或者 return false
    }
    
    var a = fn(9)   // 9 不是质数, 所以最终返回值应该是 false
    console.log(a)
    
    var a1 = fn(7)   // 7 是质数, 所以最终返回值应该是 true
    console.log(a1)