高阶函数

可以把函数作为参数传给另一个函数

  1. // filter
  2. function filter (array, fn) {
  3. let results = []
  4. for (let i = 0; i < array.length; i++) {
  5. if (fn(array[i])) {
  6. results.push(array[i])
  7. }
  8. }
  9. return results
  10. }
  11. // 测试
  12. let arr = [1, 3, 4, 7, 8]
  13. let r = filter(arr, function (item) {
  14. return item % 2 === 0
  15. })
  16. console.log(r)

可以把函数作为另一个函数的返回结果

  1. // once,使fn只执行一次的函数
  2. function once (fn) {
  3. let done = false
  4. return function () {
  5. if (!done) {
  6. done = true
  7. return fn.apply(this, arguments) //apply此处作用是调用fn,调用fn时,需要把function的参数带上,所以使用arguments。arguments是调用一个函数时的参数,是一个伪数组
  8. }
  9. }
  10. }
  11. let pay = once(function (money) {
  12. console.log(`支付: ${money} RMB`)
  13. })
  14. pay(5)
  15. pay(5)
  16. pay(5)
  17. pay(5)

gaoj

高阶函数的意义

  1. 使我们专注于目标
  2. 高阶函数是用来抽象通用的问题
  3. 让函数变得更灵活