函数的理解

  • 函数可以提高代码三性:(复用性,维护性,扩展性)
  • 函数可以隔离变量作用域
  • 函数可以控制代码执行,函数不调用不执行
  • 函数的封装没有绝对的对错,取决于书写代码时的心情以及对于业务的认知等等条件,一件事就是一个函数
  • 所有函数,无论是调用还是执行,均要清楚三要素:意义,参数,返回值

    形参,实参,与返回值的理解

  • 完成一件事的条件,就是参数,参数分为形参实参

  • 形参是抽象的,实参是具体的
  • 参数为了解耦,一个函数中有多种情况,多种情况的不同点就是参数,也就是解耦
  • 实参就是形参的值,换言之,你想对一个内部变量赋值,可以通过实参传递,通过形参声明变量
  • 封装函数的时候,参数宁多不少,这样可以提升其复用性,多的可以设置为可选参数(非必填参数)
  • 返回值就是一个函数的执行结果
  • 如果需要将内部变量传递到外部,那就把它设置成该函数的返回值,这样就可以用一个变量接受它的执行结果,从而得到该变量的值

    回调

    封装一个过滤数组的函数,从而总结(感受)一下原生filter的意义参数返回值

  • filter

    • 意义:创建一个新数组, 其不包含通过所提供函数过滤掉的元素。(只包含通过测试的元素组成的数组)
    • 参数
      • callback
        • 用来测试每个元素的函数,它可以接收三个参数:
        • element
          • 用于测试的当前值。
        • index可选
          • 用于测试的当前值的索引。
        • array可选
          • 调用 every 的当前数组。
      • thisArg可选
        • 执行 callback 时,用于 this 的值。
    • 返回值:由通过测试(没被过滤)的元素组成的数组,如果没有任何数组元素通过测试,则返回空数组。
  1. //声明一个数组
  2. let arr = [1, 2, 3, 4, 5, 6, 7]
  3. function Filter(arr, fun) {
  4. //声明一个新数组以接受没被过滤的键值
  5. let newArr = []
  6. for(let i = 0; i < arr.length; i++) {
  7. let val = arr[i]
  8. //将符合要求的过滤掉,其余推到新数组
  9. if(fun(val)) {
  10. continue;
  11. } else {
  12. newArr.push(val)
  13. }
  14. }
  15. //返回新数组
  16. return newArr
  17. }
  18. //打印输出过滤掉 能被3整除的键值 的数组
  19. console.log(filter(arr, function(val) {
  20. return (val % 3 == 0);
  21. }))

查看reduce函数 意义参数返回值
查看every函数 意义参数返回值

  • reduce
    • 意义:
      • reduce()方法对数组中的每个元素执行一个由您提供的reducer函数(升序执行),将其结果汇总为单个返回值。
    • 参数
      • Accumulator (acc) (累计器)
      • Current Value (cur) (当前值)
      • Current Index (idx) (当前索引)
      • Source Array (src) (源数组)
    • 返回值:函数累计处理的结果
    • 语法:arr.reduce(callback(accumulator, currentValue[, index[, array]])[, initialValue])
    • 参数
      • callback
        • 用来测试每个元素的函数,它可以接收三个参数:
        • element
          • 用于测试的当前值。
        • index可选
          • 用于测试的当前值的索引。
        • array可选
          • 调用 every 的当前数组。
        • initialValue可选
          • 作为第一次调用 callback函数时的第一个参数的值。 如果没有提供初始值,则将使用数组中的第一个元素。 在没有初始值的空数组上调用 reduce 将报错。
  • every
    • 语法:arr.every(callback(element[, index[, array]])[, thisArg])
    • 意义:every()方法测试一个数组内的所有元素是否都能通过某个指定函数的测试。返回一个布尔值。若接收到空数组,返回结果为true
    • 参数
      • callback
        • 用来测试每个元素的函数,它可以接收三个参数:
        • element
          • 用于测试的当前值。
        • index可选
          • 用于测试的当前值的索引。
        • array可选
          • 调用 every 的当前数组。
      • thisArg可选
        • 执行 callback 时,用于 this 的值。
    • 返回值:如果回调函数的每一次返回都通过某个指定函数的测试,返回 true ,否则返回 false。

      闭包

      递归

      连贯操作

      自执行函数(函数的自执行)