学习一、函数式编程

函数式编程,缩写 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)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值