学习一、函数式编程

函数式编程,缩写 FP,是一种编程风格,与面向对象、面向过程等编程范式并列。

函数式编程中的函数不是 function,而是 Y 与 X 的关系这一数学层面中的函数关系。

————相同的输入始终都等于相同的输出。

函数式编程用来描述(函数)之间的映射。

例:

//非函数式

let num1 = 1;

let num2 = 2;

let sum = num1 + num2;

console.log(sum);

//函数式

function add(num1, num2) {

return num1 + num2;

}

let sum = add(2, 3)

console.log(sum);

1、函数是一等公民:函数可以储存在变量中、可以作为参数、可以作为返回值。

//示例

const Control = {

    index(post){return View.index(post)},

    show(post){return View.show(post)},

    create(post){return View.create(post)},

}

//优化

const Control = {

    index: View.index,

    show: View.show,

    create: View.create,

}

2、高阶函数

我们可以把函数作为参数传递给另一个函数。

  function forEach(array, fn) {

    for (let i = 0; i < array.length; i++) {

      fn(array[i])

    }

  }

  // 测试

  //   let arr = [1, 3, 4, 7, 8]

  //   forEach(arr, function (item) {

  //     console.log(item)

  //   })

  function filter(array, fn) {

    let results = []

    for (let i = 0; i < array.length; i++) {

      if (fn(array[i])) {

        results.push(array[i])

      }

    }

    return results

  }

  // 测试

  //   let arr = [1, 3, 4, 7, 8]

  //   let r = filter(arr, function (item) {

  //     return item % 2 === 0

  //   })

  //   console.log(r)

我们也可以把函数作为另一个参数的返回结果。

  // 高阶函数-函数作为返回值

  function makeFn () {

    let msg = 'Hello function'

    return function () {

      console.log(msg)

    }

  }

  const fn = makeFn()

  //测试

  // fn()

  // makeFn()()

  // once

  function once(fn) {

    let done = false

    return function () {

      if (!done) {

        done = true

        return fn.apply({}, arguments)

      }

    }

  }

  let pay = once(function (money) {

    console.log(`支付: ${money} RMB`)

  })

  //测试

  // pay(5)

  // pay(5)

  // pay(5)

常用的高阶函数。

  // map

  const map = (array, fn) => {

    let results = []

    for (let value of array) {

      results.push(fn(value))

    }

    return results

  }

  // 测试

  // let arr = [1, 2, 3, 4]

  // arr = map(arr, v => v * v)

  // console.log(arr)

  // every

  const every = (array, fn) => {

    let result = true

    for (let value of array) {

      result = fn(value)

      if (!result) {

        break

      }

    }

    return result

  }


 

  // 测试

  // let arr = [9, 12, 14]

  // let r = every(arr, v => v > 10)

  // console.log(r)

  // some

  const some = (array, fn) => {

    let result = false

    for (let value of array) {

      result = fn(value)

      if (result) {

        break

      }

    }

    return result

  }

  // 测试

  // let arr = [1, 3, 5, 9]

  // let r = some(arr, v => v % 2 === 0)

  // console.log(r)

猜你喜欢

转载自blog.csdn.net/qq_40289624/article/details/108679087
今日推荐