javascript -- 函数知识以及练习题

人间烟火气,最抚凡人心

基础
  • 作用:将相同的功能包装,通过调用,减少重复的代码量,提高工作效率
  • 定义
    • 通过function关键字:function 函数名称() {逻辑代码}
      • 注意:函数名称不要用name
    • 通过字面量的方式:var 函数名称 = function() {逻辑代码}
  • 使用
    • 定义完函数后,函数中的代码不执行
    • 如果要执行函数中的代码,必须要调用函数才可以
    • 调用函数的语法:函数名称()
      • 注意:在调用函数的时候,小括号不可以省略
  • 参数
    • 作用:为了更灵活的解决问题
    • 形参:在定义函数时候写的参数
      • function fn(a, b) {}:a和b就是函数fn的形参
      • 形参的本质就是一个变量
    • 实参:在调用函数时候写的值
      • function fn(a, b) {} fn(2, 3):2和3就是函数fn的实参
      • 没有给实参赋值,就会出现undefined
    • 实参和形参的关系
      • 实参和形参的个数是一一对应的
        • 实参的个数和形参的个数要相同
        • 在赋值的时候,第一个实参的值会赋值给第一个形参,后面依次类推
    • 总结
      • 参数就是一个变量,参数叫什么都可以
      • 参数的个数可以根据具体的需求,自己确定
      • 参数的值的来源:来源于函数的调用
      • 如果函数有参数,那么在调用的时候就要设置对应的参数
  • 返回值
    • 作用:为了在函数外部得到函数内部变量的值
    • 通过返回值得到内部变量的值
      function fn() {
        var a = 1
        // 将变量a作为返回值,返回给函数外部
        return a
      }
      // 获取返回值
      var 变量 = fn()
      
    • 注意事项
      • 如果没有设置返回值,那么该函数也是有返回值的,默认值是undefined
      • 返回值只能设置一个return,当执行return关键字后,后面的代码不再执行
      • 如果希望多个结果返回,那么可以使用数组作为返回值
扩展
  • arguments
    • 作用:当函数中形参个数无法确定的时候,可以通过arguments获取函数传递过来的实参
    • 总结
      • 当函数中形参的个数无法确定的时候,依然要获取实参的值
      • arguments只能在函数中使用
      • arguments就是一个数组[用来保存实参信息的数组]
      • 要得到实参的个数,通过arguments.length
      • 要通过实参的具体值,通过遍历arguments数组
      • 如果函数的形参个数能够确定,那么还是推荐使用形参来获取实参的值
    function obtainSum() {
      var sum = 0
      for (var i = 0; i < arguments.length; i++) {
        console.log(arguments.length) // 5
        console.log(arguments) //  1, 3, 5, 6, 3
        sum += arguments[i]
      }
      console.log(sum) // 18
    }
    obtainSum(1, 3, 5, 6, 3)
    
匿名函数、自调用函数 (了解)
  • 匿名函数:没有函数的名字
  • 自调用函数:自己调用自己 (function() {})()
函数作用域及作用域链 (了解)
  • 作用域
    • 全局作用域:函数外部的其它区域称为全局作用域,在全局作用域中定义的变量称为全局变量
    • 局部作用域:函数内部的区域称为局部作用域,在局部作用域中定义的变量称为局部变量
    • 全局变量和局部变量的区别
      • 全局变量可以在任何作用域中直接使用
      • 局部变量只能在当前的作用域中被使用
      • 如果要使用局部变量,那么只能通过返回值才能使用
    • 注意
      • 在函数内部定义的变量叫局部变量
      • 如果要在函数内部定义全局变量,那么在定义变量的时候不加var关键字就可以了
  • 作用域链
    • 作用域和作用域链接到一块,形成的一个链状结构 ----> 作用域链一级一级往上找,形成一个链状结构,就形成作用域链
    • 作用:当程序在执行代码的时候,先在当前作用域中执行代码,如果当前作用域没有,那么程序会沿着作用域链向上一级查找执行代码
代码预解析 (了解)
  • 变量提升:当程序中遇到变量的时候,那么会将变量的声明提升到当前作用域的开始位置,不包括变量的赋值
  • 函数提升:当程序中遇到函数的时候,那么会将函数的声明提升到当前作用域的开始位置,不包括函数的调用
  • 总结:如果变量和函数相同,那么就先提升函数
练习题
  • 练习1:求 n - m 之间的数字之和 [求任意两个数字的和]
    function getSum(n, m) {
      var sum = 0
      for (var i = n; i <= m;i++) {
        sum +=i
      }
      console.log(sum)
    }
    getSum(1, 2)
    
  • 练习2:求3个数中的最大值
    function getMax(ary) {
      var max = ary[0]
      for (var i = 0; i < ary.length; i++) {
        if (ary[i] > max) {
          max = ary[i]
        }
      }
      console.log(max)
    }
    getMax([1, 4, 8])
    
  • 练习3:将一个数组中所有偶数添加到一个新数组中返回,并计算新数组总和
    function getNewAry(ary) {
      var newArray = []
      for (var i = 0; i < ary.length; i++) {
        if (ary[i] % 2 === 0) {
          newArray[newArray.length] = ary[i]
        }
      }
      return newArray
    }
    var ary = getNewAry([1, 2, 3, 4])
    var sum = 0
    for (var i = 0; i < ary.length;i++) {
      sum += ary[i]
    }
    console.log(sum)
    
  • 练习4:写一个函数,判断是否是闰年【能被4整除且不能被100整除,或者能被400整除】
    function getYear(year) {
      if (year % 400 === 0 && year % 100 !==0 || year % 400 === 0) {
        return true
      } else {
        return false
      }
    }
    console.log(getYear(2024))
    
  • 练习5:写一个函数,实现对数字数组的排序
    function getSort(ary) {
      for (var i = 0; i < ary.length - 1; i++) {
        for (var k = 0; k < ary.length; k++) {
          if (ary[k] < ary[k + 1]) {
            var c = ary[k]
            ary[k] = ary[k + 1]
            ary[k + 1] = c
          }
        }
      }
      return ary
    }
    console.log(getSort([3, 1, 4, 5]))
    
  • 练习6:判断哪一个数字是基数还是偶数
    function shu() {
      var num = prompt('请输入一个数字')
      if (num % 2 === 0) {
        alert('该数字是一个偶数')
      } else {
        alert('该数字是一个奇数')
      }
    }
    shu()
    
  • 练习7:在1~100内不通过js循环(map, for, foreach)的语法,创建一个[3,6,9…]的一个数组
    var arr = []
    function fn(n) {
      if (n === 0) {
        return
      }
      if (n % 3 === 0) {
        arr.push(n)
      }
      fn(n - 1)
    }
    fn(100)
    var newArray = arr.reverse()
    console.log(newArray)
    
  • 8
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值