高阶函数

什么是高阶函数

高阶函数的维基百科定义:至少满足以下条件之一:

  • 接受一个或多个函数作为输入;
  • 输出一个函数;

例子

function add (x, y, fn) {
  return fn(x) + fn(y);
}

var x = -5,
  y = 6,
  fn = Math.abs

add(x, y, fn)  // 11

高阶函数的好处

// 正常函数
function isType (obj, type) {
  return Object.prototype.toString.call(obj).includes(type)
}

let type = 'xxx'
let is = true
console.log(isType(type, 'String')) // true
console.log(isType(type, 'Boolean')) // false
console.log(isType(is, 'Bolean')) // false,这里因为写错了才为 false
// 假如不小心把 Boolean 写错了 Bolean,没注意,这也不会报错还会安装平常返回判断,但是这可能是错的,很多时候这种错误是不容易发现

其实可以换种写法,但是注意⚠️写类型列表时没有写错就可以避免上面的情况
下面是高阶函数写法

// 高阶函数
function isType (type) {
  return function (obj) {
    return Object.prototype.toString.call(obj).includes(type)
  }
}

const types = ['String', 'Object', 'Array', 'Null', 'Undefined', 'Boolean']
let fns = {}
types.forEach(type => fns[`is${type}`] = isType(type))

let type = 'xxx'
let is = true
console.log(fns.isString(type)) // true
console.log(fns.isBoolean(type)) // false
console.log(fns.isBolean(type)) // fns.isBolean is not a function
// 这里一样是把 Boolean 写成了 Bolean,但是这里就报错让我们可以发现这里写错了,而不是像上面那样,还以为是正常的

你可能感兴趣的:(高阶函数)